자바 23

스프링을 사용하여 로그를 남기고 로그 파일 추출하는 법

slf4j 를 사용하여 로그를 남기는 방법 import org.slf4j.LoggerFactory import org.springframework.web.bind.annotation.GetMapping import org.springframework.web.bind.annotation.RestController @RestController class LogController { private val logger = LoggerFactory.getLogger("LoggerController 의 소피로그") @GetMapping("/log") fun log() { logger.info("~~~~~~~~~~Hi ALLL~~~~ SophieLog ~~~~~~") logger.error("~~~~~~~~~~Hi ..

AOP 입문자를 위한 기초 개념 : Spring을 사용하지 않는 AOP 구현 방법

AOP란? 관점 지향 프로그래밍이란 OOP로 독립적으로 분리하기 어려운 부가 기능을 모듈화하는 방식이다. 이 글에서 트랜잭션 관리와 같은 부분이 바로 부가 기능 모듈이며, 이를 Aspect라고 한다. AOP는 핵심 비즈니스 로직과 부가 기능 Aspect를 분리하는 등 OOP를 보완하는 역할을 한다. Cross-cutting-Concern (로그처리, 보안처리, 트렌젝션처리)을 소스코드에 로그처리, 보안처리하는 코드를 다 하나하나 넣어줘야했다. 그러면 필요시에 의해서 하나하나 처리를 해줘야하기 때문에 유지보수가 힘들어진다. 과거의 방식을 유지보수에 용이하게 보완하기 위해 등장한 방법이 바로 AOP이다. Cross-cutting-Concern (로그처리, 보안처리, 트렌젝션처리)과 Core Concern(주..

DesignPattern 2022.12.29

[Springboot] 데이터 인자를 넘겨받는 각기 어노테이션 : 목적으로 다르게 효율적으로 쓰일 수 있는 방법들

오늘은 form태그에서 컨트롤러에 인자를 할당하는 어노테이션 3가지에 대해 간단히 알아보고 실무에서는 어떻게 쓰이는지에 대해 알아보도록 하자. @RequestParam query 처리 전달받은 데이터를 URI상에서 찾는다. Type 1의 URI를 처리할 때 사용한다. GET 방식으로 넘어온 URI의 queryString을 받기 적절하다. @RequestBody로 데이터를 받을 경우 메소드의 파라미터명이 상관 없지만 @RequestParam으로 데이터를 받을 때는 데이터를 저장하는 이름으로 메소드의 파라미터명을 설정해줘야 한다. 해당하는 데이터만 받아올 수 있다. (@RequestBody는 객체를 받아옴) ex) http://localhost:8080/receive?name=sophie&age=23 @Pa..

JPA 사용할 때 주의해야할 점 2편_관계매핑의 정의와 mappedBy 이해하기

그렇다면 양방향 관계 해결 방법은?? Entity01 BookStore @Entity @Getter @Setter public calss BookStore { @Id @GenerateValue private Integer id; private String name; @OneToMany(mappedBy ="bookStore") private Set books = new HashSet(); //add 메세지로 책을 책방에 추가한 것 void add(Book book){ book.setBookStore(this); this.books.add(book); } } book.setBookStore(this); 의 의미는 무엇일까? book.setBookStore(this); 를 추가하고 실행시키면 데이터 베이스 결..

Hibernate JPA 사용할 때 주의해야할 점. 원리를 모르면 그냥 쓰지마세요 1편

QueryDSL?? QueryDSL은 정적 타입을 이용해서 SQL 등의 쿼리를 생성해주는 프레임워크이다. QueryDSL의 장점 문자가 아닌 코드로 쿼리를 작성함으로써, 컴파일 시점에 문법 오류를 쉽게 확인할 수 있다. 자동 완성 등 IDE의 도움을 받을 수 있다. 동적인 쿼리 작성이 편리하다. 쿼리 작성 시 제약 조건 등을 메서드 추출을 통해 재사용할 수 있다. 잘못된 예제코드와 정상예제코드 작성을 통해 학습해보기 간단하게 entity가 두개가 있다. 이 둘은 양방향 관계이다. 일대다 양방향 관계이다. Entity01 BookStore @Entity @Getter @Setter public calss BookStore { @Id @GenerateValue private Integer id; privat..

MSA 아키텍쳐

"하나의 큰 어플리케이션을 여러개의 작은 어플리케이션으로 쪼개어 변경과 조합이 가능하도록 만든 아키텍쳐" 이것은 마치 레고놀이와 같다. 작은 레고블록(Microservice) 하나하나를 붙여 어떠한 큰 결과물을 만드는 형태를 MSA 라고한다. small services, each running in its own process(스스로 돌아 갈 수 있는 작은 서비스) 와, independently deployable(독립적 배포 가능) 이 MicroService를 설명해 줄 수 있는 가장 핵심적인 문구라고 생각합니다. microService의 정의 이 MicroService를 설명해 줄 수 있는 가장 핵심적인 문구 small services, each running in its own process(스스로..

DesignPattern 2022.10.05

디자인 패턴 SOLID : Open- closed principle 개방 폐쇄 원칙

Open- closed principle 개방 폐쇄 원칙 개방폐쇄법칙에 대해 알아보면 extension에 대해서는 open modification에 대해서는 closed라고 써있다. 확장에 대해서는 개방 수정에 대해서는 페쇄라는 뜻인데 전혀 감이 오지않습니다. 이게 코드에 대한 제안이 아니라 코드에 behaviour에 대한 principle이기 때문에 이해가 바로 와닿진 않는다. 예제코드를 써보면서 감을 잡도록하겠다. 먼저 open- closed를 준수하지않은 코드를 먼저 보자. # Animal 클래스 하나를 생성 class Animal: #내부에 그 동물의 그 타입 프로퍼티를 가지고 있는다. # a_type에는 코양이 혹은 강아지와 같은 동물의 종류를 넣는 것이다. def __inti__(self, a..

DesignPattern 2022.10.05

자바 스크립트 조건문인 switch문 이해하기

조건문의 종류에는 switch와 if문이 있다. switch문 조건문 이해하기!!! switch (대상) { case 조건값1; 동작 break; //생략가능 case 조건값2; 동작 break; //생략가능 default; 동작 } switch라는 키워드 뒤에 소괄호를 열어 비교할 대상을 작성하고, 중괄호로 블록문을 만든다. 블록문 안에 한 번 들여 써서 case 키워드를 작성하고 조건값을 입력한 뒤 **콜론(:)**으로 case문의 끝 지점을 구분해준다. 참고로 이렇게 쓰는 문장을 라벨문, 레이블문, lable statement라고 부른다. case문 안에서, 해당 조건값과 일치했을 때 동작해야 될 코드를 작성하면 된다. 참고로 이렇게 쓰는 문장을 라벨문, 레이블문, lable statement라고 ..

이펙티브 자바 Item 20. 추상 클래스보다는 인터페이스를 우선하라

자바의 다중 구현 메커니즘 자바가 제공하는 다중 구현 메커니즘은 인터페이스와 추상 클래스, 이렇게 두 가지다. -ㅈㅏㅂㅏ 8부터 인터페이스도 디폴트 메서드(default method)를 제공할 수 있게 되었다. 따라서, 두 메커니즘 모두 인스턴스 메서드를 구현 형태로 제공할 수 있다. 추상 클래스 vs 인터페이스 추상 클래스가 정의한 타입을 구현하는 클래스는 반드시 추상 클래스의 하위 클래스가 되어야 한다. 자바는 단일 상속만 지원하므로, 추상 클래스 방식은 새로운 타입을 정의하는 데 커다란 제약을 안게 된다. 반면, 인터페이스가 선언한 메서드를 모두 정의하고 그 일반 규약을 잘 지킨 클래스라면 다른 어떤 클래스를 상속했든 같은 타입으로 취급된다. 인터페이스 기존 클래스에도 손쉽게 새로운 인터페이스를 구..

Back-end Skill/JAVA 2022.04.04