본문 바로가기
728x90

Java Spring17

Java 버전 관리 brew install caskbrew install --cask temurin@21 brew install jenv 설치된 jenv 를 등록하기 위해 ~/.bashrc 또는 ~/.bash_profile 혹은 ~/.zshrc에 아래 내용을 추가한다.export PATH="$HOME/.jenv/bin:$PATH"eval "$(jenv init -)" 아래와 같이 직접 명령어를 수행해서 추가해도 된다.$ echo 'export PATH="$HOME/.jenv/bin:$PATH"' >> ~/.zshrc$ echo 'eval "$(jenv init -)"' >> ~/.zshrc아래 명령어들도 차례로 수행한다. Enable the export plugin$ eval "$(jenv init -)"$ jenv e.. 2025. 4. 29.
Resilience4j 기본 활용 시스템이 장애가 발생하는 상황에서도 탈력적으로 시스템을 버티게 만들어주는 라이브러리 [주요기능]1. Circuit Breaker : controller에서 이슈 시 일정 시간동안 호출 막기, 일정시간 경과 후 재시도, 괜찮으면 정상처리 2. Retry : 실패한 요청을 자동으로 재시도 3. Rate Limit : 초당 호출 수 제한(과도한 트래픽으로 부터 시스템 방어) 4. Bulkhead : 어떤 서비스가 과도하게 자원 차지 시 다른 서비스의 영향을 없앰(쓰레드 풀 격리) 5. TimeLimiter : 특정 작업이 오래 걸리 시 강제종료 기타- Reactive type 지원(mono, flux), WebFlux 환경에서도 구현 가능 2025. 4. 25.
Data Converting 을 왜 DTO Static 으로 처리할까? Domain entity 를 통해 db 조회 값을 가지고와서 처리 한 뒤 반환하기 위해 DTO로 값을 할당할 것이다.이것을 service layer나 controller 또는 repo class 내 직접하는 경우가 있는데 (new 로 객체 생성하여), 이렇게 하는 것보다 DTO 내 static 을 사용하여 정적메서드로 정의하면 클래스를 기반으로 객체를 만들지 않고 호출이 가능하며, 해당 메서드에 대해 한번만 메모리 할당할 수 있다는 장점이 있다. 2025. 4. 21.
spring-boot-starter-validation Java Spring 멘토링 중에 input 값에 대한 검증을 별도 DTO 나 entity 내 method를 만들어서 수행하는 멘티들이 종종 보였는데, 값에 대한 검증 (최소 숫자 등은) spring-boot-starter-validation 을 통해 DTO 단에서 간결하게 처리하고, 로직에 대한 validation 검증만을 비지니스 레이어 or 도메인엔티티 레벨에서 수행 하게 되면은 단일책임원칙을 준수하면서 관련된 비지니스 로직을 줄이고, 재사용성을 향상시킬 수 있다. 왜 그렇게 하지 않는걸까? 2025. 3. 29.
instancio 자바 스프링 테스트 객체(entity, dto) 빠르게 만들어 보자 단위테스트 코드를 짤때, DTO 나 entity 와 같은 object 단위를 생성하고 속성값들을 하나하나 씩 입력해줘야 했다.또한 단위테스트를 수행할 때는 실제 data 를 고려하지 않는다.(실제 data 와 유사한 data 를 직접 넣어주게 되는데, instancio 는 이러한 data 를 랜덤하게 자동 생성해준다.) 다양한 Data를 제공해주므로써 오히려, 테스트의 정확성도 높일 수 있다.왜? 내가 지정한 Data에서는 잘돌아갈 수 있는데 다른 Data 에서는 이슈가 발생할 수도 있기때문이다.이때 이슈 핸들링이 로직적으로 잘 수행되어있는지도 비지니스 레이어에서 처리가 되어야 하는데, instancio를 통해 이를 테스트 할 수 있기때문이다.그렇다고 우리가 매번 다른 Data를 넣는것도 현실적으로 힘.. 2024. 12. 27.
ReentrantReadWriteLock vs ReentrantLock Java의 ReentrantReadWriteLock과 ReentrantLock에 대한 비교분석 글을 작성해보려한다.( JDK 5.0 이상에서 Java 동시성 유틸리티의 일부로 제공되고 있으며, 둘다 나온지가 상당히 오래되서 다들 잘알겠지만...) 우선 결혼만 이야기하면 둘다 쓰레드를  기반으로한 Lock 제어 방식으로, DB나 분산락, MQ로 동시성제어 외에Lock 이 필요할 경우 사용하면 된다. 두개의 가장 큰 차이는 Data 정합성 측면과, Reading 이 많냐? Writing이 많냐? 의 상황 이 두가지일 것이다. 1. Data 정합성 측면    : 절대적으로 정합성이 보장되어야하면, ReentrantLock 사용이 필요하다.      (한번에, 오직 하나의 쓰레드만 락획득이 가능하기 때문이다.).. 2024. 12. 21.
Java 버전 관리 하기 temurin 하나의 PC 에서 여러 자바 버전을 개발해야할 때,어떻게 하는가?매번 환경변수를 바꿔주던지, 다 설치해놓고 설치된 경로에 하나하나씩 연결하진 않는가? 이럴때 유용하게 사용할 수 있는 툴이 temurin 이다! [설치 - Mac]brew install --cask temurin@21brew install jenv 설치된 jenv 를 zshrc 에 등록해보자밑에 명령어를 입력해서 편집기로 접속하면 된다.~/.zshrc 편집기에서 하단의 내용을 추가하고 저장!export PATH="$HOME/.jenv/bin:$PATH"eval "$(jenv init -)" 그리고 밑에 명령어들을 하나씩 입력해주자//jenv 설정$ eval "$(jenv init -)"$ jenv enable-plugin export$ ex.. 2024. 11. 28.
모키토 (Mockito) - Java Spring Test Code 기초 스프링 기반의 Test Code 의 대부분은클래스를 불러와서 값을 input 해보고 의도한 결과값이 나오는지를 확인하는 것이다. 이때 특정 클래스를 불러와서 (상속 포함) 테스트 코드를 짜야할 경우가 생기는데,이럴때 사용할 수 있는 라이브러리가 바로 Mockito 인 것이다. Mockito 는 간단하게 mock 객체를 생성할 수 있고 mock 객체에 stub 을 정의하고,테스트 할 수 있게 해준다.(Mockito 를 쓰지않을 경우 직접 interface를 구현해서 테스트를 해야할 수도 있는데,그럴 경우 작업량과 가시성이 매우 떨어지게 된다. 그럼 어떻게 써야하는가?(생각보다 간단하다).   @Mock : 의존성 주입(모의 객체 용), 사용하지 않을 시 실제 클래스 구현채를 사용하게 되므로         .. 2024. 9. 21.
Test Code 기본 - Java Spring Boot 서비스 레벨에서 간단한 메쏘드 하나 만들고(껍데기만)인텔리제이 기준으로 단축키 (CMD+N) 이나 마우스 우측 클릭 후 Generate(생성)을 클릭 후Test 옵션을 클릭하면 "Create Test" 라는 팝업창을 뛰울 수 있다.JUnit 5버전이 기본값으로 설정되어있는데,옵션항목에 보면 /@Before, @After라는 영역을 확인할 수 있을 것이다. class ReserveServiceTest { @BeforeEach void setup() {} @AfterEach void afterSetup(){} @Test Void getReserveInfo(){}} 테스트할때 @SpringBootTest 어노테이션은 webEnvironment 매개변수를 지원하는데.. 2024. 9. 18.
@Builder 빌더패턴 레거시한 소스를 보면은 아래와 같이 객체를 생성하고 값을 할당하는 것을 흔하게 보았을 것이다.ReservationInfo reservationInfo = new ReservationInfo(1, "reserved"); 하지만, 이렇게 구성하는데에는 몇가지 단점이 존재한다. 1. (위에는 고작 2개이지만) 생성자 파라메타가 많을 경우 가독성이 좋지않다.2. 값을 입력하는 순서가 매우 중요하다.3. 어떤 값에 어떻게 매핑했는지 코드만 보고 정확하게 알기 힘들다.   이를 해결하기 위한 방법으로, 빌더패턴을 사용할 수 있다!! Java spring 기반으로 백엔드 개발을 하다보면DTO, Domain, Entity level 에서 객체에 값을 입력 시 Lambok 의 builder 를 사용하는것을 보았을 것이다.. 2024. 9. 17.
단위테스트 (unit test) - Spring Boot Test !! 단위테스트라고 개발하다보면 종종 들어봤을것이다.(또는 자주) 단위테스트는 무엇일까?단위테스트란, 애플리케이션 테스트 중 코드 단위를 가능한 작게(메쏘드 단위까지) 분리해서 하나의 메쏘드를 테스트 하는것을 말합니다.오류 관점과 Data 유효성 관점 모두를!(단위 테스트와 통합테스트를 구분못하는 신입 개발자도 자주 보이죠?) 그럼 단위 테스트를 하는 이유는?그것 바로 개발 운영 관점에서 가장 빠른시점에 오류를 발견하고 수정할 수 있다는데 있습니다.왜? 운영배포 후 오류 발견하고 빠르게 해결하면 되지 않나?라는 질문을 한번씩 받는데요(스타트업에서만)굉장히 위험한 행위가 되겠죠? 이커머스 도메인만 보더라도...User 는 사이트의 신뢰성을 잃을 것이고, 재고가 없거나 잘못된 금액으로 결제가 되었을 경우, 또는 .. 2024. 9. 17.
영속성 이란? (Java Spring Boot 완전기초) 흔히 백엔드 개발을 처음 접하다 보면, 영속성이란 말을 듣게된다. 영속성? 영속성 컨텍스트?JPA?JDBC (interface, Driver)? 영속성을 사전적 정의부터 말하고 들어가는게 이해하기가 쉬울꺼같아,사전적의미는: 영원히 계속되는 성질이나 능력(네이버 국어사전 참조) 자 그럼 영원히 계속 되게 하는 성질이 Java spring 에는 어떤게 있을까?바로 Data 처리가 그 중 하나이다! 간단한 온라인 쇼핑몰을 개발하면,고객정보, 상품정보, 결제정보, 주문정보는 필수적이다.이러한 Data 가 시스템 개발 초기때와 운영중일때가 같을까?당연히 아니다!(아무도 사용안하고 아무도 관리 안 한다면 모를까?) 한명이라도 회원가입해서 사용하면 그정보는 어딘가 저장되어야한다그럼 그 정보는 어디에 저장을 할까?Da.. 2024. 9. 16.
Spring Boot 완전 기초 인텔리 J 는 설치하고!!!자바 환경 세팅이후,,, 스프링 부트 시작!(2012년에 등장!) 스프링 부트는 웹 어플리케이션을 보다 가볍고(spring 보다), 쉽고 빠르게 만들 수 있도록 도와주는자바 웹 프레임워크이다.  웹 프레임 워크: 쿠키처리, 로그인 아웃처리, DB 핸들링 등을 지원  컨트롤러 예시import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.ResponseBody;@Controllerpublic class OrderController { @GetMapping("/g.. 2024. 9. 15.
Spring Boot 기본 Spring Boot 기초에서 주로 사용하는 dependency?- Lombok- Spring Web- Spring Data JPA(기초일때만 사용)- H2 Database(다른 DB 이용 시 사용 가능)- MySQL Driver  POJO: Ioc/DI, AOP, PSA 통해 달성, OOP에 충실하면서, 특정 환경과 기술에 종속되지 않고 재사용가능하도록 설계된 Object예, 툼캣으로 세팅해서 사용중이다가 네티로 변환되더라도, 어플리케이션 레벨에서의 수정은 없어야한다.-> 테스트 간편화, 확장가능한 유연한 코드사용, 원활한 디버깅 가능(Spring 은 POJO프로그래밍을 지향하는 프레임 워크!)  느슨한 결합(DIP의 원칙적용): 직접적으로 구현체를 의존성 주입해서 사용하는 것이 아닌 추상체를 두어 사.. 2024. 9. 15.
Java 완전 기초 SOLID1. SRP: 단일 책임원칙(하나의 클래스는 하나의 책임만 가진다.)2. OCP: 개방, 폐쇄 원칙(확장에는 open, 수정에는 close)3. LSP: 리스코프 치환 원칙(객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 instance 로 바꿀수 있어야한다.)4. ISP: 인터페이스 분리 원칙(특정 client 를 위한 인터페이스 여러개가 범용 인터페이스 하나보다 낫다)            필요한 상황마다 나누자!5. DIP: 의존관계 역전 원칙(추상화에 의존!, 구현체에 의존하면 안됨)  Java의 객체지향1. 캡슐화2. 상속3. 다형성4. 추상화 Java 자료형1. Primitive Type    : boolean, byte, char, short, int, long, float,.. 2024. 9. 13.
POJO 란 무엇인가? POJO 프로그램이란...특별한 제약이나 복잡한 상속 구조 없이 순수한 Java객체를 의미!JavaBeans 규약을 따르지 않더라도 복잡한 framework나 특정 기술 스택에 의존하지 않고단순하게 설계된 Class를 말한다 그럼 장점으로는? 구조가 단순해진다: 특별한 상속이나 구현을 요구하지 않기때문에 코드가 간단하고 이해하기 쉬워진다(그렇다고 상속이나 구현을 완전히 배제하는 것은 아니다!) 유연해진다: 타 프레임워크나 라이브러리에 종속되지 않기 때문에 변경되더라도 POJO에는 직접적인 영향이 없다. 테스트 편리: 독립적이고 자유롭게 동작하기때문에, Unit 테스트 실행이 가능하다 2024. 9. 13.
Java 에 대해서 Java 가 발생한 배경부터 살펴보겠다. 우선 자바는 썬 마이크로 시스템즈로 부터 95년도(아주 오래전)에 객체지향프로그램밍언어(OOP)의 시대를 알린 언어이다.오픈 소스기반으로 운영되면서, 왜 개발언어와 툴은 오픈소스로 운영되야하는지에 대한 모범을 보여준 사례중 하나이다.당시, Java 의 Main 경쟁 언어로써 C#(마이크로 소프트) 언어가 있었는데, C#은 C 를 기반으로 한 개발자들이 많고 Visual Studio(Visual Studio Code 아님) 라는 IDE의 강점과 오류발생시 마이크로 소프트 개발자들이 직접 error fix를 한다는 강점이 있었다. 하지만,,, 결과는 자바의 승리(?)아무리 마이크로소프트개발자들이 개발하고 테스트 및 이슈 수정을 한다하더라도, 전세계의 개발자를 당해낼 .. 2024. 9. 13.
728x90