목록spring (7)
필기노트
목차 1. 요청 매핑 2. 요청 매핑 - API 예시 3. HTTP 요청 파라미터 4. HTTP 요청 파라미터 - Map으로 조회 5. HTTP 요청 파라미터 - @ModelAttribute 6. HTTP 요청 메시지 - 단순 텍스트 7. HTTP 요청 메시지 - JSON 8. HTTP 응답 - 정적 리소스, 뷰 템플릿 9. HTTP 응답 - HTTP API, 메시지 바디에 직접 입력 1. 요청 매핑 @RestController public class MappingController { private Logger log = LoggerFactory.getLogger(getClass()); /** * 기본 요청 * 둘다 허용 /hello-basic, /hello-basic/ * HTTP 메서드 모두 허용 ..
REFERENCE 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 - 인프런 | 강의 웹 애플리케이션을 개발할 때 필요한 모든 웹 기술을 기초부터 이해하고, 완성할 수 있습니다. 스프링 MVC의 핵심 원리와 구조를 이해하고, 더 깊이있는 백엔드 개발자로 성장할 수 있습니다., 원 www.inflearn.com 목차 1. FrontController 패턴 특징 2. 컨트롤러 인터페이스 도입 3. 이 인터페이스를 구현한 컨트롤러를 만들어보자. 4. FrontController를 만들어보자. 5. 뷰를 처리하는 객체를 만들자. 6. 어댑터 패턴 7. 어댑터용 인터페이스 8. 실제 어댑터를 구현해보자. 9. 핸들러 어댑터용 FrontController 10. ModelView 11. 요약 1. FrontCon..
예를 들어서 할인 서비스를 제공하는데, 클라이언트가 할인의 종류(rate, fix)를 선택할 수 있다고 가정해보자. 스프링을 사용하면 소위 말하는 전략 패턴을 매우 간단하게 구현할 수 있다. 주입 분석 public class AllBeanTest { @Test void findAllBean() { ApplicationContext ac = new AnnotationConfigApplicationContext(FixDiscountPolicy.class, RateDiscountPolicy.class, DiscountService.class); } static class DiscountService { private final Map policyMap; @Autowired public DiscountServi..
기본 코드 @Component public class OrderServiceImpl implements OrderService { private final MemberRepository memberRepository; private final DiscountPolicy discountPolicy; @Autowired public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy discountPolicy) { this.memberRepository = memberRepository; this.discountPolicy = discountPolicy; } } 생성자가 딱 1개만 있으면 @Autowired 를 생략할 수 있다. @Compo..
객체 인스턴스를 하나만 생성해서 공유하는 싱글톤 방식은 여러 클라이언트가 하나의 같은 객체 인스턴스를 공유하기 때문에 싱글톤 객체는 상태를 유지(stateful)하게 설계하면 안된다. 무상태(stateless)로 설계해야 한다! 특정 클라이언트에 의존적인 필드가 있으면 안된다. 특정 클라이언트가 값을 변경할 수 있는 필드가 있으면 안된다! 가급적 읽기만 가능해야 한다. 필드 대신에 자바에서 공유되지 않는, 지역변수, 파라미터, ThreadLocal 등을 사용해야 한다. 스프링 빈의 필드에 공유 값을 설정하면 정말 큰 장애가 발생할 수 있다!!! ThreadA가 사용자A 코드를 호출하고 ThreadB가 사용자B 코드를 호출한다 가정하자. public class StatefulService { private..
1. 제어의 역전 IoC(Inversion of Control) 컨트롤의 제어권이 사용자가 아닌 프레임워크에 있어서 필요에 따라 스프링에서 사용자의 코드를 호출한다. 2. 의존관계 주입 DI(Dependency Injection) 한 객체가 어떤 객체에 의존할 것인지는 별도의 관심사이다. 그래서 강하게 결합된 클래스들을 분리하고, 애플리케이션 실행 시점에 객체 간의 관계를 결정해 줌으로써 결합도를 낮추고 유연성을 확보해준다. 단, 한 객체가 다른 객체를 주입받으려면 반드시 DI 컨테이너에 의해 관리되어야 한다는 것이다. 3. 관점 지향 프로그래밍(Aspect Oriented Programming, AOP) 로깅, 트랜잭션, 보안 등 여러 모듈에서 공통적으로 사용하는 기능을 분리하여 관리할 수 있다. 모든..
목차 3. 테스트케이스 작성 5. 웹 MVC 개발 6. 스프링 통합 테스트 7. 스프링 데이터 JPA 3. 테스트케이스 작성 @Test public void save() { Member member = new Member(); member.setName("spring"); repository.save(member); Member result = repository.findById(member.getId()).get(); Assertions.assertThat(result).isEqualTo(member); } src/test/java 하위 폴더에 생성한다. @Test (junit.jupiter) -> 바로 실행이 가능해진다 Assertions.assertThat (assertj) -> 옵션 엔터 -> 스..