본문 바로가기

반응형

전체 글

(76)
[Spring] Mysql 연동 시 application.yml 이슈 gradle 기반의 Spring boot 프로젝트 세팅 시 아래 두 가지를 진행해야한다. 1. build.gradle 에 Mysql 의존성 추가 2. application.yml 에 DB connection 정보 추가 나의 경우에는 2번째에서 계속 빨간 줄로 남아있었다. 검색 결과 Spring Boot 2.7.8 이후로는 mysql-connector-java 의존성이 아닌 mysql-connector-j 의존성을 추가해주면 된다고 한다. dependency { ... runtimeOnly 'com.mysql:mysql-connector-j' } reference - https://luvstudy.tistory.com/221 - https://velog.io/@letgodchan0/Spring-boot-M..
[Spring] MVC pattern & Front controller Servlet과 JSP의 한계 Servlet 사용 시 아래와 같이 뷰 화면을 위한 HTML을 만드는 작업이 자바 코드에 섞여 복잡했다. PrintWriter w = response.getWriter(); w.write(""); w.write(""); w.write(" "); ... JSP를 사용하면 뷰를 생성하는 HTML 작업은 깔끔해지며, 중간중간 동적으로 변경이 필요한 부분에만 자바 코드를 적용했다. 하지만 복잡한 화면의 경우 비즈니스 로직이 길어져 유지보수가 어렵다. id username age 따라서 비즈니스 로직은 Servlet 처럼 다른곳에서 처리하고, JSP는 목적에 맞게 화면을 그리는 일에 집중하는 MVC 패턴이 등장했다. MVC 패턴 Model View Controller 패턴으로, 위의..
[Spring] @Transactional 과 AOP @Transactional Spring 에서 제공하는 어노테이션의 종류로, 클래스 / 메서드 / 인터페이스 위에 추가하여 사용한다. 만약 메서드에 추가된다면 해당 메서드에 대해 내부적으로 AOP를 통해 트랜잭션 처리 코드가 전후로 수행된다. 트랜잭션의 필요성 체스 게임을 개발한다고 가정해보자. 새 게임이 시작될 때마다 초기화 된 체스판(1)과 새로운 체스말(2)이 필요할 것이다. 만약 트랜잭션이 없다면 체스판은 초기화되어 제공(1)되더라도 체스말(2)이 세팅되지 않는 경우가 발생할 수 있다. 1번과 2번 요청을 개별적으로 요청하게 된다면, 데이터베이스 입장에서는 두 요청을 별개의 작업으로 처리할 수 있다. 따라서 하나의 트랜잭션 단위로 묶어서 아래와 같이 하나의 세션으로 데이터베이스에 요청해야한다. 위 ..
Spring AOP https://jainkku.tistory.com/98 AOP란? AOP (Aspect-Oriented Programming, 관점 지향 프로그래밍) OOP를 보완하는 수단으로, 흩어진 관심사(Cross-cutting Concerns)를 모듈화할 수 있는 프로그래밍 기법이다. 여러 객체에 공통으로 적용할 수 있는 기 jainkku.tistory.com Spring AOP 장점 컴파일러나 클래스 로더 조작기를 설정하지 않아도 됨 주의사항 프록시는 메서드 오버라이딩 개념으로 동작하기 때문에, Spring AOP는 메서드 실행 시점에만 AOP를 적용할 수 있음 반면에 AspectJ는 모든 지점에 AOP를 적용할 수 있다. Spring AOP는 Spring 컨테이너가 관리할 수 있는 빈에만 AOP를 적용할 수 ..
AOP란? AOP (Aspect-Oriented Programming, 관점 지향 프로그래밍) OOP를 보완하는 수단으로, 흩어진 관심사(Cross-cutting Concerns)를 모듈화할 수 있는 프로그래밍 기법이다. 여러 객체에 공통으로 적용할 수 있는 기능을 분리해서 개발자의 반복 작업을 줄이고 핵심 기능 개발에만 집중할 수 있도록 한다. Calculator 객체 구현 예시 팩토리얼 연산을 수행하는 Calculator 인터페이스가 있고, 이를 반복문 형태로 구현한 BasicCalculator가 있다고 해보자. package aop; public interface Calculator { long factorial(long num); } package aop; public class BasicCalculator..
IoC와 DI IoC (Inversion of Control) 제어의 역전이라는 의미로, 메서드나 객체의 호출이 개발자가 아닌 외부에서 결정되는 것을 의미한다. IoC 장점 객체의 의존성을 역전시켜 객체 간의 결합도를 줄이고 유연한 코드를 작성할 수 있도록 한다. 따라서 가독성이 높고, 코드 중복은 적으며 유지보수 시 편리하다. IoC 컨테이너 객체에 대한 생성 및 생명주기를 관리할 수 있는 기능을 제공한다. 예로는 Spring 프레임워크의 Spring 컨테이너가 있다. 기존에는 다음과 같이 객체가 생성되고 실행되었다. 1. 객체 생성 2. 의존성 객체 생성 (클래스 내부에서 new 연산자를 통해 생성) 3. 의존성 객체 메서드 호출 Spring의 경우 다음과 같다. 1. 객체 생성 2. 의존성 객체 주입 (제어권을 ..
DI 방법과 장단점 DI 방법 의존성 주입 방법에는 다양한 방법이 존재한다. 필드 주입 수정자(setter) 주입 생성자 주입 각 방법의 장단점과, 생성자 주입을 사용해야하는 이유를 알아보자. 필드 주입 필드에 @Autowired 어노테이션만 붙여주면 자동으로 의존성 주입이 된다. @Controller public class Controller{ @Autowired private Service service; } 코드가 간결한 것이 장점이지만, 반대로 그렇기 때문에 의존관계를 파악하기 힘들다. 또한 외부에서 접근이 불가하며, 필드가 final 변수일 경우 @Autowired 어노테이션을 쓸 수 없다. 수정자(setter) 주입 Setter 메소드에 @Autowired 어노테이션을 붙이는 방법이다. @Controller pu..
Blocking vs Non-blocking / Sync vs Async Blocking vs Non-blocking 처리되어야하는 하나의 작업이 전체 작업 흐름을 막느냐 (Blocking), 막지 않느냐(Non-blocking) 에 대한 관점이다 즉, 제어권이 누구한테 있느냐가 포인트이다 Blocking Blocking 의 경우, 제어권이 호출하는 쪽에 있다 Non-blocking 반대로 Non-blocking 의 경우, 제어권이 작업을 시킨 주체에게 있다 Synchronous vs Asynchronous 처리해야할 작업들을 어떠한 흐름으로 처리할 것인가의 관점이다 호출되는 함수의 작업 완료 여부에 따라 이어지는 작업을 누가 처리하느냐의 차이이다 Synchronous 호출하는 함수 A가 호출되는 함수 B의 작업 완료 후 리턴을 기다리거나, 바로 리턴받더라도 미완료 상태이면 ..

반응형