<Spring Boot> Controller 만들기

Google 아니고 Joogle·2022년 6월 29일
0

Spring / Spring Boot 

목록 보기
1/5

Controller 만드는 예제를 실행하기 전에 기본 개념부터 간단하게 정리!

1. MVC (Model View Controller)

Controller

클라이언트의 요청에 대해 Model이 업무 수행을 완료하면 그 결과를 가지고 화면을 생성하도록 View에 전달하는 역할을 하게 되며, 일종의 조정자 담당

  • Model : 무엇을 할 지에 대한 로직을 담고 비지니스 로직을 처리하기 위한 역할
  • View : 최종 사용자에게 결과를 화면(UI)로 보여주기 위한 역할
  • Controller : 이 두 사이에 있는 컴포넌트로 Model이 데이터를 어떻게 처리할 지를 알려주는 역할

2. Annotation

자바에서 Annotation은 코드 사이에 주석처럼 쓰이며 특별한 의미, 기능을 수행하도록 하는 기술. 즉, 프로그램에게 추가적인 정보를 제공해주는 meta data

  • 컴파일러에게 코드 작성 문법 에러를 체크하도록 정보 제공
  • 소프트웨어 개발 툴이 빌드나 배치시 코드를 자동으로 생성할 수 있도록 정보 제공
  • 실행시 특정 기능을 실행하도록 정보 제공
  • annotation 정의 → classannotation 배치 → 코드가 실행되는 중에 *Reflection을 이용하여 추가 정보를 획득하여 기능을 실시

*Relection?

  • Reflection이란 프로그램이 실행 중에 자신의 구조와 동작을 검사, 조사, 수정하는 것
  • Java와 같은 객체 지향 프로그래밍 언어에서 Reflection을 사용하면 컴파일 타임에 interface, field, method 이름을 알 지 못해도 실행 중에 class, interface, field, method 접근 가능
  • 새로운 객체의 인스턴스화 및 메소드 호출 허용
  • Annotation 자체는 아무런 동작을 가지지 않는 단순한 표식일 뿐이지만, Reflection을 이용하면 Annotation의 적용 여부와 엘리먼트 값을 읽고 처리

3. Annotation 종류

@Component

개발자가 직접 작성한 Class를 Bean으로 등록하기 위한 Annotation

@Component
public class Student {
    public Student() {
        System.out.println("hi");
    }
}

Component에 추가 정보가 없다면 Class의 이름을 camelCase로 변경한 것이 Bean id로 사용

@Component(value="mystudent")
public class Student {
    public Student() {
        System.out.println("hi");
    }

@Bean과 다르게 @Componentname이 아닌 value를 이용해 Bean의 이름을 지정

@Bean

개발자가 직접 제어가 불가능한 외부 라이브러리 등을 Bean으로 만들려할 때 사용되는 Annotation

@Configuration
public class ApplicationConfig {    
    @Bean
    public ArrayList<String> array(){
        return new ArrayList<String>();
    }   
}

ArrayList 같은 라이브러리 등을 Bean으로 등록하기 위해서 별도로 해당 라이브러리 객체를 반환하는 Method를 만들고 @Bean Annotation 사용

위의 경우 @Bean에 아무런 값을 지정하지 않았으므로 Method 이름을 camelCase로 변경한 것이 Bean id로 등록
(method 이름이 arrayList()인 경우 arrayList가 Bean id)

@Configuration
public class ApplicationConfig {    
    @Bean(name="myarray")
    public ArrayList<String> array(){
        return new ArrayList<String>();
    }   
}

위와 같이 @Bean에 name이라는 값을 이용하면 자신이 원하는 id로 Bean 등록

@RestController

Spring에서 ControllerView로 응답하지 않는 Controller를 의미
method의 반환 결과를 JSON 형태로 반환
이 Annotation이 적혀있는 Controller의 method는 HttpResponse로 바로 응답이 가능

@Controller와 @RestController

  • @Controller : API와 view를 동시에 사용하는 경우에 사용. view(화면) return이 주목적
  • @RestController : view가 필요없는 API만 지원하는 서비스에서 사용. @RequestMapping 메서드가 기본적으로 @ResponseBody 의미를 가정. data(json, xml등) return이 주목적

4. Controller 만들기

https://github.com/JuyoungKimmy-Kim/spring-mytest2.git

  1. 원하는 패키지에 controller.java 파일 생성
  2. 배포 시에 루트 콘텍스트를 '/'로 설정할 것이므로 http://localhost:8080를 입력했을 때 hello가 출력
    (@RestController Annotation을 사용한 이유는 RestController 응답 자체가 몸체가 되므로 별도의 뷰 페이지를 작성하지 않고 설정이 제대로 되었는지 확인할 수 있기 때문)

  3. 컨트롤러를 사용하는 main 클래스
    스프링 부트는 WAR가 아니라 JAR형태로 동작
    따라서 main 메서드가 실행되면 내장된 톰켓이 실행돼서 웹을 통해 접근

    (@SpringBootApplication : @Configuration, @EnableAutoConfiguration, @ComponentScan 3가지를 하나의 Annotation으로 합친 것)

Reference
https://goddaehee.tistory.com/203
https://velog.io/@gillog/Spring-Annotation-%EC%A0%95%EB%A6%AC
스프링부트로 배우는 자바 웹 개발 p90~92

profile
Backend 개발자 지망생

0개의 댓글