SPRING

· SPRING
SpringMVC 구조로 개발을 할 때 Service 계층을 Service, ServiceImpl 즉 인터페이스와 구현체로 구분하여 개발을 하던 중 이것이 단순히 관습적인 구조로 인한 것인지 아니면 정말 근거를 가지고 작성을 했던 건지 스스로를 되돌아보게 되었다. 이 주제는 정말 다양한 측면에서 생각해 볼 수 있는 문제이고, 상황에 따라 수많은 의견이 분분한 주제이므로 정답은 없다고 생각한다.하지만 이번 주제에 대해서든, 그게 아니더라도 어떠한 구조든 적용했을 때는 그만한 근거를 가지고 이유를 알고 사용해야 유의미하다고 생각하기에 이번 글에서 그 이유에 대해 정리해보려고 한다. 객체지향 설계의 관점에서 본 Service, ServiceImpl객체지향 설계의 대표적인 원칙인 SOLID를 먼저 살펴볼 필요가..
· SPRING
사용자의 전달값을 핸들러의 매개변수로 매핑할 때 사용되는 @RequestParam과 @ModelAttribute에 대해 평소 모호하게 느껴졌던 부분을 정확하게 이해하기 위해 이번 글을 작성하게 되었다. @RequestParam@RequestParam 어노테이션은 사용자가 요청 시 전달하는 값을 Handler(Controller)의 매개변수로 1:1 매핑할 때 사용하는 어노테이션이다. HTTP 요청 파라미터를 받아오기 위해 사용되고, 따라서 Body를 직접 조회하지 않는다.@Controllerpublic class TestController { @GetMapping("/") public String getTestPage(@RequestParam("name") String name) { ..
· SPRING
스프링 MVC를 공부하던 도중 요청에 맞는 컨트롤러가 매핑되어 호출되는 과정에서 그 내부 구조가 궁금하여 학습하게 되었다. 스프링 MVC는 위와 같은 흐름으로 진행된다. 그림을 보면 Dispatcher Servlet이 중간에서 요청과 반환의 중심에 있는 것을 확인할 수 있다. 1. Dispatcher Servlet Dispatcher Servlet이란? dispatch는 "보내다"라는 뜻을 가지고 있다. 이는 다른 많은 웹 프레임워크와 마찬가지로 HTTP 프로토콜로 들어오는 모든 요청을 가장 먼저 받아 적합한 컨트롤러에 위임해 주는 프론트 컨트롤러(Front Controller)라고 정의할 수 있다. 즉 Dispatcher Servlet은 request에 대한 전반적인 요청을 처리한다고 볼 수 있다. 지..
· SPRING
스프링을 사용할 때에는 의존관계 주입, 즉 Dependency Injection이 중요하고 잘 알고 사용해야 한다. 예전에는 AppConfig라는 클래스를 설정정보로 만들어 @Configuration 어노테이션을 작성해주고 그 아래에 @Bean 을 작성하고, 객체를 생성하고, 주입할 대상을 일일이 적어주어서 의존관계를 직접 주입해주었다. 그러나 이러한 과정은 너무 복잡하고 상당히 번거롭다. 그래서 스프링은 의존관계 주입을 자동으로 할 수 있는 수많은 기능들을 만들어냈다. 스프링은 @Component 뿐만 아니라 @Controller, @Service, @Repository 처럼 계층에 맞추어 일반적인 애플리케이션 로직을 자동으로 스캔할 수 있도록 지원한다. 거기에 더해서 최근 스프링 부트는 컴포넌트 스캔..
AOP가 필요한 상황 모든 메소드의 호출 시간을 측정하고 싶다면? 공통 관심 사항(cross-cutting concern) vs 핵심 관심 사항(core concern) 회원 가입 시간, 회원 조회 시간을 측정하고 싶다면? MemberService 회원 조회 시간 측정 추가 package hello.hellospring.service; @Transactional public class MemberService { /** * 회원가입 */ public Long join(Member member) { long start = System.currentTimeMillis(); try { validateDuplicateMember(member); //중복 회원 검증 memberRepository.save(memb..
순수 JDBC 리포지토리 구현 주의! 이렇게 JDBC API로 직접 코딩하는 것은 20년 전 이야기이다. 따라서 고대 개발자들이 이렇게 고생하고 살았구나 생각하고, 정신건강을 위해 참고만 하고 넘어가자. 주의! 이렇게 JDBC API로 직접 코딩하는 것은 20년 전 이야기이다. 따라서 고대 개발자들이 이렇게 고생하고 살았구나 생각하고, 정신건강을 위해 참고만 하고 넘어가자 Jdbc란, Java DataBase Connectivity, 데이터베이스를 연결하기 위한 API이다. Jdbc 회원 리포지토리 package hello.hellospring.repository; import hello.hellospring.domain.Member; import org.springframework.jdbc.dataso..
[회원 웹 기능 - 홈 화면 추가] [회원 웹 기능 - 등록] [회원 웹 기능 - 조회] MemberController를 통해서 회원을 등록하고 조회하는 기능을 만들어 보겠다. 회원 웹 기능 - 홈 화면 추가 // 홈 컨트롤러 추가 package hello.hellospring.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; @Controller public class HomeController { @GetMapping("/") public String home() { return "home"; } } @GetMapping("/") : L..
[컴포넌트 스캔과 자동 의존관계 설정] [자바 코드로 직접 스프링 빈 등록하기] 컴포넌트 스캔과 자동 의존관계 설정 기존에 만들었던 로직들의 화면을 붙이고(?) 싶은데 그러려면 Controller와 viewTemplate이 필요하다. 따라서 MemberController를 만들어야 한다. MemberController는 MeberService를 통해서 회원가입하고, 데이터를 조회할 수 있어야 한다. → MemberController가 MemberService를 의존한다고 표현한다 package hello.hellospring.controller; import hello.hellospring.service.MemberService; import org.springframework.stereotype.Con..
송경훈
'SPRING' 카테고리의 글 목록