Spring Boot - 어노테이션

상목·2023년 4월 10일
0

Spring

목록 보기
1/6

1. jsp의 라이브러리 JSTL 사용법

2. 자바 어노테이션(Annotation)의 구성 요소

어노테이션 : 프로그램 내에서 주석과 유사하게, 프로그래밍 언어에는 영향을 미치지 않으면서 프로그램 / 프로그래머에게 유의미한 정보를 제공하는 역할과 코드와 문서를 합쳐 하나로 만들 수 있는 방법

<어노테이션 사용 예>

@Test // method()가 테스트 대상임을 JUnit 단위테스트 프로그램에게 알린다. 
public void method(){
}

<어노테이션 구성요소>

1) @Override : 부모의 멤버를 오버라이딩할 때 오탈자를 입력하는 경우가 많다. 이러한 실수를 방지하기 위한 애노테이션이다.

class Child extends Parent{
   @Override
   void parentMethod(){ }
}

2) @Deprecated : 앞으로 사용하지 않을 것을 권장하는 필드나 메서드에 붙인다.

@Deprecated // 사용 권장 x
public int getDate(){
   return normalize().getDayOfMonth();
}

3) @FunctionalInterface : 함수형 인터페이스의 제약사항이 지켜져 있는지 확인하는 어노테이션이다.

@FunctionalInterface
public interface Runnable{
   public abstract void run(); // 추상메서드
}

4) @SuppressWarning : 컴파일러의 경고메세지가 나타나지 않게 억제하는 어노테이션이다.

// unchecked 경고를 억제
@SuppressWarnings("unchecked") 
ArrayList list = new ArrayList(); // 지네릭 클래스는 원시타입 쓸 수 없지만, 지정해주지 않음
list.add(obj); // 여기서 경고 발생

// 둘 이상의 경고를 동시에 억제 하는 코드

@SuppressWarnings(("deprecation", "unchecked","varargs", "rawtypes"))
메타 어노테이션 : 어노테이션을 위한 어노테이션이다. 즉, 어노테이션을 만들 때 사용하는 어노테이션 이다.

어노테이션 사용법

3. 자바 리플렉션

JVM은 클래스 정보를 클래스 로더를 통해 읽어와서 해당 정보를 JVM 메모리에 저장한다. 그렇게 저장된 클래스에 대한 정보가 마치 거울에 투영된 모습과 닮아있어, 리플렉션이라는 이름을 가지게 되었다.

자바 프로그램 내부의 객체, 클래스, 메서드 등에 대한 정보를 동적으로 조작하고 검사할 수 있는 기능

실행 중에 클래스의 정보를 얻을 수 있다. 예를 들어, 클래스 이름, 필드 및 메서드 이름, 메서드 매개변수 및 반환 타입 등을 찾을 수 있다. 이러한 정보를 사용하여 클래스의 인스턴스를 생성하고 메서드를 호출하거나 필드 값을 읽거나 쓸수 있다.

리플렉션은 디버깅 도구나 코드 생성 도구 등에서 유용 하지만, 리플렉션을 남용하면 코드의 가독성이 떨어지고 성능도 저하될 수 있다. 따라서, 리플렉션을 사용하기 전에 꼭 필요한지를 고려하고, 다른 대안이 없는 경우에만 사용하는 것이 좋다.

4. Maven과 Gradle을 쓰는 이유와 사용법

Maven과 Gradle은 빌드 도구로서, 소스 코드 컴파일, 테스트 실행, 라이브러리 관리, 배포 등을 자동화하는 도구 이며 두 도구는 모두 Java 언어로 작성된 오픈 소스 프로젝트 이다.

<Maven 란?>

Apache 소프트웨어 재단에서 개발된 프로젝트 관리 도구입니다. 프로젝트 빌드에 필요한 의존성 라이브러리를 관리하고 라이브러리를 다운로드하여 로컬 레포지토리에 저장하고 XML 형식의 빌드 스크립트를 사용하며, 일반적으로 Central Repository에서 라이브러리를 다운로드하여 사용 한다.

<Gradle 란?>

Groovy 언어로 작성된 빌드 도구 이며, 빌드 스크립트 작성을 위해 Groovy DSL을 사용하며, 프로젝트 빌드 및 테스트 실행, 의존성 관리, 리소스 처리 등 다양한 기능을 지원한다.

Gradle은 빌드 스크립트를 통해 프로젝트를 커스터마이징하기 쉽고, 빌드 성능도 우수하다.

<Maven 과 Gradle의 장점>

Maven은 기존에 많은 프로젝트에서 사용되어 왔으며, Central Repository에서 다양한 라이브러리를 제공하므로 초기 설정이 쉬운 장점이 있습니다. 반면 Gradle은 Maven보다 성능이 우수하고, 유연한 빌드 스크립트 작성이 가능하며, 최신 기술을 더 빠르게 도입할 수 있는 장점이 있습니다.

5. IoC, DI, AOP

IoC, DI, AOP은 모두 객체 지향 프로그래밍의 개념 중 하나이다.

IoC (Inversion of Control) : IoC는 제어의 역전이라는 뜻으로, 객체의 생성부터 생명주기까지를 개발자가 아닌 프레임워크나 컨테이너가 관리하는 것을 의미한다. 즉, 개발자가 작성한 코드가 아닌 프레임워크나 컨테이너가 알아서 객체를 생성하고, 의존성을 관리하며, 객체 간의 연결을 담당한다.

DI (Dependency Injection) : DI는 의존성 주입이라는 뜻으로, IoC의 한 형태이다. 개발자가 직접 객체 간의 의존성을 관리하지 않고, 프레임워크나 컨테이너가 의존성을 자동으로 주입해주는 것을 의미한다. 이렇게 의존성을 주입받은 객체는 자신의 역할을 수행하는 데 필요한 다른 객체를 직접 생성하거나 참조하지 않아도 되어 코드의 결합도가 낮아지고 유지보수가 용이해 진다.

AOP (Aspect-Oriented Programming) : AOP는 관점 지향 프로그래밍이라는 뜻으로, 여러 모듈에서 공통적으로 사용되는 기능을 분리하여 하나의 모듈로 만들어 관리하는 프로그래밍 기법이다.

로깅, 보안, 트랜잭션 관리 등과 같은 공통적인 기능을 여러 모듈에서 중복해서 구현하지 않고, 하나의 모듈로 분리하여 관리하며, 이렇게 분리된 모듈을 'Aspect'라고 하며, AOP는 Aspect를 사용하여 여러 모듈에서 공통으로 사용되는 기능을 효과적으로 관리한다.

이 세 가지 개념은 각각 다른 기능을 수행하지만, 함께 사용하여 객체 지향 프로그래밍을 더욱 유연하고 확장 가능하게 만든다.

IoC와 DI는 객체 생성과 의존성 주입을 자동화하여 코드의 결합도를 낮추고, AOP는 공통 기능을 분리하여 재사용성을 높일 수 있다.

6. 서블릿 컨테이너

먼저 Spring Container를 이해하기 위해서는 IOC와 DI를 이해해야 한다. Spring Container는 Bean들의 생명주기를 관리한다. Spring Container는 어플리케이션을 구성하는 Bean들을 관리하기 위해 IoC를 사용한다. Spring Container종류에는 BeanFactory와 이를 상속한 ApplicationContext가 존재한다. 이 두개의 컨테이너로 의존성 주입된 빈들을 제어하고 관리할 수 있다. 아래는 스프링 웹 애플리케이션 동작 원리이다.

1) 웹 애플리케이션이 실행되면 Tomcat(WAS)에 의해 web.xml이 로딩된다.(load-on-startup으로 톰캣 시작시 servlet생성 가능하도록 설정 가능)

2) web.xml에 등록되어 있는 ContextLoaderListener(Java class)가 생성된다. ContextLoaderListener 클래스는 ServletContextListener 인터페이스를 구현하고 있으며, ApplicationContext를 생성하는 역할을 수행한다.

3) 생성된 ContextLoaderListener는 applicationContext.xml을 로딩한다.

4) applicationContext.xml에 등록되어 있는 설정에 따라 Spring Container가 구동된다. 이때 개발자가 작성한 비즈니스 로징에 대한 부분과 DAO, VO 객체들이 생성된다.

5) 클라이언트로부터 웹애플리케이션 요청이 온다.

6) DispatcherServlet(Servlet)이 생성된다. DispatcherServlet은 FrontController의 역할을 수행한다. 클라이언트로부터 요청 온 메시지를 분석하여 알맞은 PageController에게 전달하고 응답을 받아 요청에 따른 응답을 어떻게 할지 결정만 한다. 실질적인 작업은 PageControlle에서 이뤄지기 때문이다. 이러한 클래스들을 HandlerMapping, ViewResolver클래스라고 한다.

7) DispatcherServlet은 servlet-context.xml(spring-mvc.xml)을 로딩한다.

8) 두 번째 Spring Container가 구동되면 응답에 맞는 PageController들이 동작한다. 이때 첫 번째 Spring Container가 구동되면서 생성된 DAO, VO, ServiceImpl 클래스들과 협업하여 알맞은 작업을 처리하게 된다.

7. 스프링 컨테이너

스프링 프레임워크의 핵심 기능 중 하나로, 객체의 생성, 관리 및 의존성 주입(Dependency Injection)을 담당하는 컨테이너이다.

빈(Bean)이라는 객체를 생성하고, 이들 빈을 관리하고 Bean은 일반적으로 스프링에서 제공하는 어노테이션을 사용하여 정의한다.

스프링 컨테이너는 빈의 생성, 초기화, 소멸 등의 라이프사이클을 관리하며, 필요에 따라 빈의 의존성을 주입한다. 또한, IoC를 지원하며 IoC는 객체의 생성 및 관리에 대한 제어권이 개발자가 아닌 프레임워크에게 있음을 의미한다. 이를 통해 개발자는 객체 간의 의존성을 더욱 유연하게 관리할 수 있다.

8. TCP SCHOOL 사이트에서 실습

-> JQuery

-> Ajax

9. POJO(Plain Old Java Object) 란?

특정한 제한 없이 자바의 일반적인 객체를 의미한다. 즉, POJO는 특정한 인터페이스나 클래스를 상속받지 않고, 특정한 규약을 따르지 않는 자바 객체이다.

POJO를 사용하면 더욱 유연하고 확장 가능한 코드를 작성할 수 있으며, 객체 간의 의존성을 줄일 수 있다.

intallij 사용법

<설정>

plugins 클릭 -> korean설치, translation설치 -> Restart IDE

다운로드 항목

<프로젝트 생성>

새로운 프로젝트 생성

경로지정 상관 없음, 언어 java선택, 시스템빌드 intallij선택 jdk 17번전 선택

시작 입력 -> 시스템설정클릭 -> 시작 시 프로젝트 다시 열기 체크박스 체크버튼 해제

휠 입력 -> 일반 선택 -> Ctrl + 마우스 체크하면 Ctrl + 마우스로 마우스 휠로 크기조정 가능

intallj 단축어

Ctrl + 방향키 : 단어 단위로 위치 이동

Ctrl + Shift + 방향기 : 단어별로 블록 드래그

Ctrl + w : 범위 확인 (여러번클릭시 범위 늘릴수 있음)

pageUp, pageDown : 페이지 위아래로 이동

Ctrl + Shift + END, Ctrl + Shift + Home로 범위지정 가능, Shift빼면 커서 위치 이동

Art + 1 은 프로젝트로 커서 이동 Esc는 원상복귀

프로젝트에서 Art + insert 클릭시 파일 생성 창 띄워짐

소스 화면 창에서 art방향키로 프로젝트 이동가능

art + F4 클릭시 .java파일 꺼짐

드래그 + Ctrl + Shift + 위아래 방향키 : 한줄이동

profile
풀스택 개발 이야기

0개의 댓글