Spring MVC
·
SpringBoot
목차1. Spring@MVC2. @Controller3. @Controller 단위 테스트4. Handler 메서드의 파라미터 Spring MVC란?- MVC 기반(model2)의 Web Application을 작성하기 위한 Spring Framework의 하위 모듈 - Front controller pattern : Dispatcherservlet - / 경로를 처리하므로 모든 요청을 받아들임 - Action parameter방식이 아닌 URL 기반으로 요청 분기 - 주요 특징 - Annotaion 기반 -> spring @MVC - 다양한 view 지원 - restful 웹 서비스 지원 - 테스트 용 Spring@MVC 구성요소- DispatcherServlet - 가장 중추적인 역할 ..
AOP(Aspect Oriented Programming) - (2)
·
SpringBoot
이어서 AOP의 동작 원리에 대해서 알아보자.AOP의 동작원리에서 Proxy라는 얘가 등장하는데 중요한 친구이다. AOP 동작 원리, 프록시(Proxy)를 중심으로 까보자핵심 키워드 하나만 기억하면 된다. “프록시 = 가짜 껍데기”진짜 객체 앞에 서서 모든 호출을 대신 받아주고, 필요한 ‘양념(공통 로직)’을 치고 나서 본게임(핵심 로직)을 실행시키는 녀석이다.. 1. 스프링 부트가 애플리케이션을 올릴 때 무슨 일이 일어날까컴포넌트 스캔@Aspect 붙은 클래스 발견 → “오? AOP 쓰네?”포인트컷 분석execution(* com.example.demo.controller..*(..))“controller 패키지에 있는 모든 메서드 잡아라!”프록시 빈 생성포인트컷에 걸린 클래스마다 프록시 객체를 하나씩..
AOP(Aspect Oriented Programming) - (1)
·
SpringBoot
AOP에 대해서 알아보자.AOP는 Spring framework의 특징 중 하나이다.그렇다면 왜 이렇게 AOP가 중요한지 알아보자. AOP를 처음 보면 무슨 말인지 이해가 안될 것이다. 또한 왜 AOP와 나중에 배우게 될 Filter, Intercepter와 비교를 하는지 모를 것이다.하지만 이 글을 보고 나면 AOP에 대해서 어느 정도 이해가 될 것이다. AOP의 정의는 관점 지향 프로그래밍이다. 다시 말해 문제를 바라보는 관점을 기준으로 프로그래밍을 하는 방법이다.그렇다면 관점을 기준으로 프로그래밍을 한다는 것이 무엇일까? 우리가 어떤 프로젝트를 코딩하다보면 분면 내가 만들고 있는 프로젝트의 주된 기능과 부가적인 기능이 있을 것이다.여기서 주되 기능은 핵심 관심사항이고, 부가적인 기능은 공통관심 사항..
DI(Dependency Injection) - (3)
·
SpringBoot
묵시적 DI(Implicit Dependency Injection) 스프링에서 묵시적 DI는 개발자가 “어떤 빈을 연결할지”를 직접 코드에 쓰지 않고,스프링 컨테이너가 자동으로 빈을 찾아 주입해 주는 방식1. @Component: 빈 후보(Bean Candidate) 등록역할: 이 클래스는 “스프링이 관리할 수 있는 빈”이라는 표시만 한다.실제 빈 등록은 @ComponentScan이 해당 패키지를 스캔해야 일어난다.기본 빈 이름클래스명 PascalCase → 메서드명 스타일 camelCase로 변환예: MyService → myService@Component("customName") 속성으로 직접 지정 가능// 빈 후보 표시@Componentpublic class Hat { … } // 빈 이..
DI(Dependency Injection) - (2)
·
SpringBoot
명시적 DI가 어떻게 동작하는지 단계별로 쪼개서 설명1. Maven 의존성 추가spring-context 하나만 넣으면,IoC 컨테이너(Core BeanFactory)애노테이션 지원JavaConfig (@Configuration/@Bean)AOP, 이벤트, 리소스 처리 등 핵심 모듈이 전부 따라온다. org.springframework spring-context 6.2.2이 한 줄로 스프링 컨테이너가 제공하는 모든 기능을 쓸 준비가 된다.2. 설정 클래스(@Configuration) 작성@Configuration:‘이 클래스는 빈 설정 정보를 담은 파일입니다’라고 표시한다.스프링이 이 클래스를 읽어서 내부적으로 CGLIB 프록시 클래스로 감싼다.그래서 @Bean 메서드를 여러 번 호출해도 항상 싱글..
DI(Dependency Injection) - (1)
·
SpringBoot
의존성과 DI의존성은 우리가 무언가 행동 하기 위해 사용해야 하는 도구를 말한다. 예를 들어 우리는 빨래하기 위해 세탁기에 의존하고, 세탁기가 없다면 빨래하기 힘들 것이다.이처럼, 의존성은 없애기 힘들다. 그러면 우리는 의존성을 어떤 식으로 가지고 있을까? 필요한 물건을 사는 것과 빌리는 것(랜탈)을 비교해보자. 구매렌탈초기 비용모든 상품 직접 선정·비교→ 많은 리소스 투입1차적인 비교·선정은 렌탈 업체가→ 적은 리소스 투입핵심 기능빨래빨래상대적 장점/단점장점내꺼니까 내맘대로 (당근하기, 페인트 칠하기)단점제품 직접 관리 필요– 고장 수리·청소 등에 직접 개입장점제품 관리는 렌탈 업체에서 처리 → 유지 보수 용이단점당근 시 계약 위반, 총 비용은 더 비쌈결론빨래를 위해 보유한 세탁기!당근할 일은 없지만,..
Spring Framework
·
SpringBoot
Framwork? - Frame을 가지고 하는 작업 또는 구조물의 뼈대나 틀을 말한다. - SW의 시선으로 바라본다면 비지니스 로직이 빠진 뼈대만 갖춰진 반제품 형태의 애플리케이션이라고 볼 수 있다.컴퓨터 프로그래밍에서 소프트웨어 프레임워크는 소기의 목적을 달성하거나 복잡한 문제를 해결하고 서술하는 데 사용되는 기본 개념 구조이다. 간단히 뼈대, 골조, 프레임워크라고도 한다. - 위키백과 - 예시 )파워포인트 [프레임워크] + 발표내용[비즈니스 로직]전자레인지[프레임워크] + 음식[비즈니스 로직] Spring Framework - 자바 애플리케이션 개발을 위한 경량 framwork - 스프링 부트랑 다른 개념인 것을 유의!! - 프레임워크는 비즈니스 로직하고는 무관한 귀찮고..
JDBC(2)
·
데이터베이스
JDBC API JDBC를 이용한 DB 연동JDBC Driver Class 로딩 (JDBC 4.0 이후 버전부터 생략 가능)Connection 생성Statement 생성SQL 실행결과 집합 처리자원 반납Step 1. JDBC Driver Class 로딩이 단계에서는 데이터베이스와 통신하기 위한 ‘드라이버’를 준비하는 작업을 합니다.자바 애플리케이션이 “MySQL 드라이버를 쓰겠다”라고 등록(로딩)하면,이후 DriverManager가 이 드라이버를 이용해 실제 DB와 연결을 맺을 수 있게 됩니다.즉, 운전사를 고용해서 “이제 이 운전사로 DB에 갈 거야”라고 말해두는 단계라고 생각하면 됩니다. 위와 같은 작업은 진행하면, DBMS와 연결을 수립해주는 역할의 JDBC Driver Class 메모리에 로딩 및..
JDBC(1)
·
데이터베이스
목차1. JDBC2. JDBC API3. DAO 디자인 패턴4. JDBC와 트랜잭션  Java DataBase Connectivity (JDBC)sun 회사에서 개발 유지 보수하기 쉽도록 자바 애플리케이션에서의 DB 접근 및 사용 방법에 대한 표준화 필요성 부각 자바 애플리케이션과 DB와의 의존성을 낮추고 독립성을 필요 표준화된 인터페이스 제공java.spl 패키지이 그림은 자바 애플리케이션이 JDBC라는 통로(라이브러리)를 통해 오라클, MySQL, DB2 같은 여러 데이터베이스에 연결하는 모습을 간단히 보여줍니다.자바 프로그램에서 JDBC를 사용하면, 각 데이터베이스마다 제공되는 JDBC 드라이버(구현체)를 통해 손쉽게 연결하고 데이터를 주고받을 수 있습니다.결국, 자바 애플리케이션은 JDBC만 알면..
Baekjoon - 피보나치 함수
·
코딩테스트 연습
https://www.acmicpc.net/problem/1003 문제의 조건은 N이 주어졌을 때, fibonacci(N)을 호출했을 때, 0과 1이 각각 몇 번 출력되는지 구하는 프로그램을 작성하는 것이다. 그리고 제한 시간이 0.25초 라는 것을 명심해야 한다. 문제에서 주어진 대로 재귀 함수로 구현한다면 시간초과가 뜬다.  찾아보니깐 방법이 두가지가 있었다. 1. 메모이제이션2. DP(동적프로그래밍) 이 글에서는 메모이제이션에 대해서 설명하겠다. 피보나치란?피보나치 수열은 F(n) = F(n-1) + F(n-2)의 형태로, 이전 두 수의 합이 현재 수가 되는 수열입니다. 기본 값: F(0) = 0, F(1) = 1예시: 0, 1, 1, 2, 3, 5, 8, 13, 21, ...재귀로 구현했을 때 문..