🐢 꼬부기 LV.1 | 개념•기초/💧물대포(핵심개념)

스프링부트에서 데이터 주고 받기

서화 2026. 1. 19. 12:49

✔️@Controller 사용하기

기존에는 임플리먼츠로 컨트롤러를 상속 받았는데 부트에서는 임플리먼츠를 사용하지 않고 스프링부트에서 제공해주는 컨트롤러를 사용할수 있다

임플리먼츠 대신 @Controller를 사용한다 이렇게 하면 임플리먼츠가 없어지면서 인터페이스를 사용하지 않는다

따라서 오버라이딩을 강제하지 않아도 되서 자유도가 높아진다 

스트링의 인자로 사용자요청정보를 받는데 기존에는 리스폰스와 리퀘스트를 사용했다 서블릿은 반포조라서 포조로 만들기 위해서는 이 인자들을 안써도 된다 따라서 어디로 갈지만 정하면 되서 경량화가 된다

✔️커맨드 매핑해주기

두가지 방법이 있는데  @ReqestMapping과 GetMapping을 사용하는 방법이있다

@RequsetMapping은 기존에 쓰던 방식으로 값과 요청방식을 정할수 있다

@GetMapping은 비교적 최신사용법으로 요청할 커맨드를 적어준다

두가지 방법중에 하나만 사용해서 설정해주면 된다

✔️사용자의 요청 정보 추출하기

로그인.jsp

로그인을 성공하려면 아이디와 비번이 있어야한다 따라서 사용자 요청 정보를 추출하기 위해서는 인자에 VO를 쓸수있는데

VO는 DTO이므로 지금 MemebrDTO를 넣을수 있고 이것을 커맨드 객체라고 한다 memberDTO의 파라미터의 이름과 세터의 이름이 같게 적어줘야한다

예시) 뷰에서 mtel을 추가하고 싶다면 DTO에 mtel의 세터를 추가해야한다 컨트롤러는 할일없음

커맨드 객체의 역할은 DTO를 인자로 받아 스프링이 객체를 생성해주는것이다

DTO만 커맨드 객체인것은 아니고 인자로 MemberDAO나 세션도 넣을수 있다 따라서 DTO가 커맨드 객체라기 보다는 커맨드 객체의 역할에 대해 알고 있으면 좋을 것같다

이렇게 인자에 DTO를 받음으로 인해  new 키워드를 없앨수 있다 커맨드 객체를 생성할때 사용할수 있는것들은 사용하는게 좋다

✔️MemberDAO 를 인자로 사용시 문제점

현재 인자에 MemberDAO라고 작성했는데 이 방식으로 사용하면 문제점이 두가지 있다

1. 테스트1,테스트2이런식으로 메서드가 늘었을때 여러번생성된다

2.AOP를 설정할때 불편하다

따라서 멤버DAO를 사용하는 클래스를 인자에 적는다 즉 인자에서 memberDAO가 빠지고 DAO를 사용하는 클래스인 memberService를 컨트롤러의 멤버변수에 넣어준다 

멤버 변수가 생기는 순간 의존성 주입을 해줘야하고 의존성 주입은 @Autowired로 가능하다

의존성을 주입하기위해서는 멤버서비스 객체가 만들어져 있어야되는데 @Service를 사용하여 객체를 생성해주었다

@Service("ms")
public class MemberServiecimpl implements MemberService {

✔️데이터 보내기

모델 앤 뷰에서 위의 과정으로 앤뷰가 빠지게 되었으니 모델만 사용한다 따라서 커맨드객체에 모델이 추가되어야한다

여기서 Model은 모델이라는 이름을 사용하는 객체다 즉 DTO와 같은것이다 리퀘스트를 대신하고  실제 DB를 가져오지 않는다

모델을 사용하면 addAttribute을 사용해서 이름과 객체명을 가져올수 있는데 이것은 request.setAttribute와 같고 객체명 대신 DTO를 적는다

실행 코드

 

✔️2-Layerd 아키텍쳐

컨트롤러 파트에서 서비스라는 멤버변수는 DI(의존성주입)의 대상이라고 했다

2-Layerd 아키텍쳐란 층이 2개라는 뜻으로 AOP를 사용할수 있는 형태를 말한다

기존  mvc레이어를 프레젠테이션 레이어 혹은 mvc레이어라고 하며 컨트롤러를 위한 레이어를 비즈니스 레이어라고한다

비즈니스,핵심의,서비스,기능,CRUD 다 같은뜻이다

부트에서는 여러개의 컨테이너를 가지고 있는데 그중 ds가 유일한 서블릿으로 핸들러매퍼와 VR → 컨트롤러 반환까지의 구조는 프레젠테이션 레이어에 해당한다

그러나 서비스를 멤버변수로 받으면  DAO와 DB연결이 관련로직 및 객체가 있고 이 로직들이 기존 스프링 컨테이너 보다 먼저 실행되어야 하기때문에 루트컨테이너라고 부른다 이름은 루트지만 그래도 스프링에서 사용하는 컨테이너다

비즈니스 레이어를 루트 컨테이너라고 단정할 수는 없으며,
스프링 컨테이너 안에서 역할이 분리된 하나의 레이어가 추가된 개념으로 이해하면 된다.

web.xml에서 루트컨테이너를 설정할수 있다

<listener>
    <listener-class>
        org.springframework.web.context.ContextLoaderListener
    </listener-class>
</listener>

ContextLoaderListener는 애플리케이션 시작 시 루트 컨테이너(ApplicationContext)를 생성하는 역할을 한다.

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
        /WEB-INF/spring/root-context.xml
    </param-value>
</context-param>

이때 context-param의 contextConfigLocation에 지정된 ApplicationContext 설정 파일(root-context.xml)을 로딩하여
루트 컨테이너를 구성한다

 

'🐢 꼬부기 LV.1 | 개념•기초 > 💧물대포(핵심개념)' 카테고리의 다른 글

AOP 설정 및 사용  (0) 2026.01.23
AOP 용어 정리  (0) 2026.01.23
스프링부트 맛보기  (0) 2026.01.18
실제 스프링의 이해  (0) 2026.01.17
스프링의 구조를 이해해 보기  (0) 2026.01.16