본문 바로가기

백엔드/스프링 핵심 개념11

동기, 비동기 / WEBFLUX, MONO 프로젝트를 진행하며, 비동기적으로 진행하자는 팀 의견(많은 사람들이 요청할 것이라는 가정), 그리고 PORTONE의 SRC를 직접 받아서 사용하는 형태로 인해 그 형태의 틀을 따라야 하는데, 그 틀이 비동기였던 이유로 전 과정을 비동기적으로 진행하게 되었다. 동기/ 비동기 동기: 작업 a,b,c가 있다면, a이후 , a의 종료를 기다리고 b -> c를 진행한다 비동기: a이후, a의 종료 동안 b를 진행하고, b가 종료되면 callback되어 그 떄로 돌아가고, 그 이후 b,c를 진행한다. 이 돌아가는 것, 즉 일꾼을 쓰레드(프로세스의 작업단위가 된다) 라고 한다. WEBFLUX란? implementation 'org.springframework.boot:spring-boot-starter-webflux.. 2024. 2. 23.
TDD 정처기에서 배웠던 내용이네, 특히 그중에서도 테스트 중심으로 생각하는 새로운 개발 방법. 일단 test를 작성하고. 이를 통과하는 구현코드를 작성. 주로 애자일모델, 폭포수모델?(어떻게 가능한지는 잘 모르겠다.) 1. Red (실패하는 테스트를 짠다) 2. green(테스트를 성공시킨다) 구현 3. 구현코드를 리팩토링 . 반복한다. TDD까지 하는 이유가 뭘까? 스스로 지속적으로 눈앞에 당장 할일이 생긴다. 협업 코딩 환경에서 주로 사용하는 방식이다. 실질적으로 효율적인 TDD가 되기 위해서는, 설계 흐름에 익숙해야하낟. 사람의 요구사항을 프로그램이 할수 있는 기능으로 변환해야하고, 단위 기능으로 세분화하고. 기능의 관계와 상호작용 설계하는 모든것이 가능해야한다. 테스트 작성 또한 잘 해야한다. 발전 과.. 2024. 1. 3.
Handler Methods 요청과 응답을 진행한다. @RequestMapping -> template 엔진을 사용해야만 (Thymeleaf)의미가 있다. 지정해서 요청의 응답을 변경할 수 있다. Mapping annotation에서, value = "/어쩌구", name = "내가 지정해주는 이름" 인데, 저절로 생성해준다. (겹칠때 회피가 가능하다) headers = "header-auth =~~" 등, 특정 header의 요청에 대해서만 반응하게 만들 수 있다. consumes -> json 데이터 요청만을 받는다. 요청 httpSession,ServletRequest,등을 받을 수 있는 요청이 된다. @RequestBody , @PathVariable, @RequestParam등을 사용할 수 있다. 수 많은 요청이 있다. 응.. 2024. 1. 2.
완성한 개발자 저장 프로젝트를 통해 핵심 복습 핵심 내용을 복습해보겠다. 프로젝트 -> 클론프로젝트 -> 개발자 프로젝트에 있는 내용을 기반으로 복습을 진행하겠다. 1. DI, IOC 의존성 주입. Controller에서, dmakerservice를 사용하겠다. 원래는 당연히 이런 꼴의 생성자 모습이 되어야 한다. 이러한 생성자의 실행이 ioc, 여기에 dmakeservice를 넣어주는것이 DI가 된다. 모든 빈을 다 가지고 있다가, DI를 컨트롤 해주는 것이 application context. 이 application context가 진행해주기 때문에, 별도의 생성자 생성이 필요없다. 2. AOP 일정 부분에서 일정 point에서 저장해주고, 문제가 생기면 exception을 발생시키고, 이러한 것들을 @Transactioanl을 통해서 수행된다.. 2023. 12. 30.
Null Safety 널 안정성 sql기억하자. 진짜 null이 너무 힘들었던 기억이 있다. 빈객체이자, 연산시는 0이자.. 이런 관리하기 힘들었던 null을 자바로 검증해보자! 매번 if(request (매개변수이다) == null ); return ; 해줘야한다. 이렇게 반복적으로 계속 똑같은 코드를 찍어야 하는 것을 보일러 플레이트라고 한다. 1. @NonNull 해당것은, NULL이 아니다. 메소드 변수 앞에, 메소드 앞에 , 변수 앞에 모두 붙일 수 있다. 만약에 NULL이 나오면, 호출 되기도 전에 EXCEPTION이 빠르게 발생. + 에러내용 확인이 가능하다. 2. @Nullable -> null일 수 있음을 명시함. ide에서 알려주고 ,warning을 직접 찍어주기 까지 한다. ! 굉장히 쉽다. 2023. 12. 27.
SpEL 특별한 표현 언어로써, 문법을 통해 데이터나 설정값을 가져오는 것 . ex) school.calls.teacher.name이라 하면, 학교의 반의 선생님 이름 과 같이 데이터를 가져온다. 이럴때 주로 사용하는 expression langauge . Spring에서 사용가능하고 주로쓰는 짧은 표현 언어라고 볼 수 있다. Helloworld라는 문자열을 그 자체를 literal로 받아서, 이를 concat할수도 있고, Uppercase인 새로운 HELLOWORLD도 얻을 수 있다. (허나 이렇게 사용하는 경우는 거의 없다. 작동구조를 위한것) Bean의 properties( properties는 bean의 설정이나 데이터 값 (변수, 속성이라고 한다))가 상수가 아니기를 바랄 때가 많을 것이다. 이럴 때 주.. 2023. 12. 27.
Resource URL보다 고차원적인 개념으로 파일들을 가져오기 위하여. SPRING에서 제공하는 INTERFACE RESOURCE라는 객체로 생성했을때, 사용할 수 있는 메소드 들. UrlResource(기본적인 url), ClassPathResource (classpath하위 리소스 접근시) FileSystemResource(file을 다룸) 등등이 있다 . 실사용 -> ResourceLoader 실제 사용은 applicationContext라는 스프링의 핵심 기능을 집약해둔 모듈에서, (스프링 구성,동작등을 모두 전담) 이와 같이, ResourceService라는 빈을 등록하면서 ApplicationContext가 자기 자신을 ctx에 삽입. 그 이후 setResource라는 메소드를 통해서, 본인 자체로 특정 경.. 2023. 12. 26.
Validation, Data binding Validation -> 유효성 검증 사용자, 혹은 서버의 요청을 받는 서버에 관련하여 . 잘못된 내용이 있는지 확인한다. 데이터 검증 . 데이터 하나하나를 확인. 필수 데이터의 존재 유무, 문자열 길이, 값의 범위 , email , 신용카드같은 형식에 따른 데이터 비지니스 검증 . 결재 잔액은 충분한가? db의 데이터까지 조회, 검증 . -> 반드시 분리되는 개념이진 않음 . Spring 의 Validation Java Bean Validation -> javabean은 데이터를 쉽게 넣었다 뺴는 단순 구조의 class. 개별 데이터를 검증하기 . name , age , email등의 변수가 있는 user class . public class MemberCreationReqeust { @NotBlank.. 2023. 12. 26.
AOP 관점 지향. 특정 함수 호출 전, 후에 공통적인 처리를 위한 것. 특정 타이밍에서만 원하는 작업을 넣어주고 싶을때 사용한다. 즉. 공통적이지만 모든 곳에 공통적이지 않은 logging->특정 부분에 상세 로깅하고 싶을때. Transaction -> 내부적으로 aop 기법을 사용해서 , 시작과 끝 지점 처리. 인증 -> 특정 영역 사용을 위한 인증. 주로 LOGGING(시간재기나 등등)LOCK,인증 등에서 사용한다. AOP사용의 단점? 코드 분석을 어렵게 하는 단점이 있고, 보수적으로 사용하는 것은 어떨까 제안 . Aspect -> 특정 관심사를 모듈화 한것. Advice- > 실제 적용 기능. 로깅, 트랜잭션등의 기능 join point-> 프로젝트의 진행중, AOP를 넣어줄 수 있는 포인트. POINT.. 2023. 12. 25.
JAVA- spring, spring boot/ BEAN 객체 지향적 프로그래밍의 장점? -> 비즈니스의 모습을 그대로 표현할 수 있는 장점이 매력적 C++도 마찬가지. JAVA는 JVM(가상머신)위에서 작동하기 때문에, 여러곳에서 즉시 사용될 수 있다. SPRING은 , 주로 JAVA를 생각하지만, 코틀린과 같은 언어로도 개발할 수 있다. 스프링은, 자바가 한글이라고 치면, 책을 구성하는 틀이라고 생각할 수 있으며. 사용하지 못하는 경우도 분명히 존재할 수 있다. 즉 , Frame work이다. 그 중, 동일한 코드를 계속 찍어낼 필요가 있을까? 우리가 제공하면 안될까? -> spring boot. +장점 . 웹 어플리케이션이 내장되어있다 (TomCAT) Spring의 핵심 기술 동작원리를 알아야, 응용이 가능하다. 이 또한 모든 과목과 같다. 1. data.. 2023. 12. 25.