전체 글 62

aop

advice 실행하려고 하는 코드 pointcut 해당 코드를 언제 실행할 것인가에 대한 표현식 이 ex) execution(* com.in28minutes.learnspringaop.aopexample.business.*.*(..)) Aspect advice + pointcut Weaver aop를 구현한 프레임워크 ex) AspectJ, Spring AOP Join Point pointcut이 참일 때 advice가 실행되고 advice의 실행 인스턴스 @After 메소드가 성공하든 exception을 던지든 실행함 @AfterReturning 메소드가 성공할 때만 실행함 @AfterThrowing 메소드가 exception을 던질때만 실행함 @Pointcut 사용할 때 위치를 찾아서 할 수있지만, ..

Repository vs Dao

Dto는 아는데 Dao는 들어만 봤지 어떤 것인지 몰라 정리하게 되었습니다! DAO Dao(Data Access object)는 데이터에 접근하기 위한 객체로 데이터베이스 혹은 다른 영속성 매니커즘에 대한 접근을 추상화 해주는 역할 + 영속성 : 데이터를 생성한 프로그램의 실행이 종료되더라도 사라지지 않는 데이터의 특성을 의미 어플리케이션에서 저장소에 접근하기 위해 DB 종류별로 저장소에서 제공하는 API를 통해 접근한다. 하지만 이 과정에서 문제점이 있다. 첫번째, 구현체와 로직이 너무 강한 결합을 가지게 된다. 만일 내가 영구 저장소를 Mysql을 쓰고 있었다고 가정해 보자. 이때 영구저장소를 Oracle로 바꿔야 한다는 요구사항이 들어왔다면, 우리는 Mysql의 API를 사용한 모든 구현을 변경해야..

백엔드 2023.10.19

레이어드 아키텍처(Layered Architecture)란?

레이어드 아키텍처(Layered Architecture)가 무엇인지 알아보겠습니다. 레이어드 아키텍처를 들어가기전에 소프트웨어 아키텍처가 무엇인지 먼저 알아보도록 하겠습니다. 소프트웨어 아키텍처란? 소프트웨어 아키텍처란, 소프트웨어 시스템의 전체적인 구조와 구성요소들 간의 상호작용을 설계하는 것을 말한다. 건축물로 비유해보자면 뼈대를 잡는 것과 같다. 어떤 자재를 사용하고 어떻게 조립하는지에 따라 건축물의 결과가 달라진다. 이와 비슷하게 소프트웨어 아키텍처는 시스템의 전체적인 동작을 결정하고, 시스템의 품질( 확장성(extensibility), 재사용성(reusability), 유지 보수 가능성(maintainabiliy), 가독성(readability) )에 직접적으로 영향을 미친다. 그만큼 소프트웨어..

백엔드 2023.10.12

Spring Security

인증: 적절한 사용자인지 파악한다. 권한: 특정한 작업을 수행할 권한이 있는지 파악한다. 가고 싶은 곳으로 가도록 하거나, 혹은 정보를 얻도록 허용하는 과정이다. 예시) 비행기 탑승 ㅡ> 여권, 신분증 검사(인증) ㅡ> 항공권으로 탑승 권한 부여(권한) MVC패턴은 모든요청을 Dispatcher Servlet이 인터셉트후 적절한 Controller로 연결해준다. Spring Security는 모든요청을 Spring Security이 인터셉트 후 (인증과 권한을 확인) Dispatcher Servlet으로 전송되고 적절한 Controller로 연결해준다. Spring Security Filter Chain CORS(Cross-Origin Resource Sharing) 브라우저에서 다른 출처의 리소스를 공..

responseBody

package com.in28minutes.springboot.myfirstwebapp.hello; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; @Controller public class SayHelloController { @RequestMapping("say-hello") @ResponseBody // 메시지가 리턴한 것 그대로를 브라우저에 리턴하는 것 public String sayHello() { return "Hello! What ..

logging 간단 정리

Log란 시스템 동작 시 시스템 상태, 작동 정보를 시간의 경과에 따라 기록한 것을 말합니다. 그리고 Logging이란 정보를 제공하는 일련의 기록인 Log를 생성하도록 시스템을 작성하는 활동을 말합니다. trace 로그에 있는 모든 정보 출력 debug 훨씬 더 많은 정보 출력 info 로깅된 모든 정보 출력 warning 조금 더 많은 정보 출력 error 오류와 예외만 출력 off 전체 로깅 끄기 위로 올라갈수록 점점 로그의 양이 많아진다.(좀 더 자세한 정보를 제공한다.) (복붙) 로그레벨 설명 TRACE 모든 메시지를 표시하기 위한 정보 DEBUG 프로그램 디버깅하기 위한 정보 INFO 상태변경, 서비스 동작 상태를 위한 정보 WARN 향후 잠재적으로 문제를 야기할 수 있는 정보 ERROR 의도..

Annotations vs XML Configuration

Annotations vs XML Configuration Annotations XML Configuration 편함 쉽다 어렵다(직접하나씩 설정해줘야됨) 코드 길이 짧다. 번거롭다 pojo(오래된 방식의 간단한 자바 오브젝트) 사용안함 자바코드를 바꿀 필요가 없다. 관리 쉽다. 어렵다 ex) 클래스 이름은 바꾸면 xml에서도 바꿔줘야함 사용빈도 자주사용 거의 사용안함 디버깅 난이도 어렵다 명시적으로 표현되어 있기때문에 디버깅이 조금 쉽다. 둘 다 사용해도 괜찮다. 하지만 사용을 한다면 어노테이션을 사용하던지, XML만 사용하던지 단 1개만 사용해야한다. 즉 둘을 섞어서 쓰면 안된다.

프로토타입 vs 싱글톤타입

package com.in28minutes.learnspringframework.examples.e1; import org.springframework.beans.factory.config.ConfigurableBeanFactory; import org.springframework.context.annotation.*; import org.springframework.stereotype.Component; import java.util.Arrays; @Component class NormalClass { } @Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE) //프로토타입 클래스 @Component class PrototypeClass { } @Config..