Skip to content

juneyr.dev

Java (29)

View all tags

JVM, Java

[WIP] JVM Crush 분석하기 - 왜 갑자기 내 서비스 죽었지?

서론 갑자기 애플리케이션이 죽었다. 🤔 Port Down 이길래 내가 모르는 배포가 있었던가 했더니 아니었다. 1) 애플리케이션 로그를 봤다. 일정 시간대 이후로 끊어진 것을 제외하고는 특이사항이 없었다. 2) 서버 CPU, I/O 등 지표를 봤다. 갑자기 과다한 요청이 들어오거나 끊긴일도 없었다. 애플리케이션이 죽은 뒤에 (당연히) CPU 계산량이나 disk I/O…


Java, Logging, Security

소나큐브 log4j 취약점 fix

혹시 모르니까..


Java

intelliJ + Spring Boot + gradle 에서 로컬 jar lib 넣는 방법

원하는 jar 다운로드 하기 maven central 에 올라가지 않은 jar 버전업이 필요없는 (^^!!) jar 더이상 지원하지 않는 jar 인 경우 jar 파일 라이브러리를 직접 임포트해줄 일이 발생한다. 경로는 원하는 모듈의 src 와 같은 계위에 libs 폴더 (이름은 딱히 상관없지만 convention) 을 만들고 그 하위에 넣어준다. jar libs 로 만들기 Project Structure…


Spring, Java

RestTemplate 말고 WebClient

가장 먼저 코드로 본 web 요청 인터페이스는 WebClient였고, 명확하고 직관적이여서 자주 썼다. 그런데 현재 프로젝트에서는 RestTemplate과 WebClient가 혼재되어있어서, 이 둘에 대해서 조금 알아볼까 한다. 뭐가 더 먼저 나왔을까 : RestTemplate WebClient vs RestTemplate으로 치면 스택오버플로우 글 하나가 나온다. "야 Spring…


Java, Server, CS

로드맵 파헤치기

서론 roadmap 을 보면서, 내가 아는 것도 어렴풋이 알고 있고 모르는 건 아주 화끈하게 모른다는 점을 알게 되었다. 머릿속에 정리가 안되는 찜찜한 상태로 있기 보다는, 일단 위키를 만들어서 써내려가기로 했다. 최대한 2-3줄 안에 정리하는게 목적인데 잘 될지는 ! 😮 상세한 설명을 한 나의 블로그 글이 있으면 첨부한다. CS 기본 지식 관련 질문 (네트워크 / 자료구조 / OS / 알고리즘) OSI…


JPA, Java

transient : 두가지 사용례, 비슷한 의미

java에서도, JPA에서 볼 수 있다


Java

타입 속 타입 : Parameterized Type

List<T> 형태를 알아보자구


Java

Effective Java 2E 정리하기 1편

자바를 좀더 잘 쓰려면 어떻게 해야할까


Spring, Java, AOP

AOP(Aspect Object Programming) 이란

Spring에서의 AOP


Java, Spring, Effective java, clean code

좋은 JAVA 생성자를 만드는 법[EFFECTIVE JAVA 2E]

생성자는 어떤 방식으로 만들어야할까?


Serializable, Java

왜 직렬화는 직렬화일까

직렬화 이름이 궁금해


JPA, Java

JPA 가 뭔데 쓰는건가요?

Spring을 공부하던 중에, 멘토님께서 JPA의 중요성을 강조해주셨습니다. Django 는 ORM 으로 간단하게 DB를 다루고 쓸 수 있었는데, Spring에서는 어떤 식으로 DB에 접근하고 데이터를 읽어오는 지 궁금해졌습니다. 설마 학교에서 하던 것 처럼 현업에서 직접 DB에 커넥션 맺고 길고 긴 코드로 가져오는 건 아닐테니 말입니다. 🤨 이 포스트에서는 JPA가 무엇인지, 왜 등장했는지와 QueryDSL…


Test, Spring, Java

스프링에서는 어떻게 테스트하나요?

단위테스트는 뭔가요? 외부에 의존성이 없는 소프트웨어 단위의 테스트. 단위테스트는 빨라야한다. Working Efficiently with Legacy Code 의 저자는 테스트 실행시간이 0.1초가 넘어가면 단위테스트가 아니라고 말했다. BDD Behavior Driven Development Given : 조건. ~가 주어졌을 때 When: ~를 한다면 (행위) Then: 이래야한다. AAA Arrange / Act…


Generic, Java

Java Generic 자바 제네릭

Generic 개념을 제대로 정의하지 않고 넘어가니 계속해서 의문점이 생기는 경우가 늘어난다. ArrayList<String> 으로만 접한 Generic을 좀더 잘 정의해보도록 한다. Generic (제네릭) 일반적인 자료형이라고 하면, 우리는 int, double, String…


Java

URL Encoding과 Java로 URL 뜯기

별것아닌거 같은데 삽질을 했던게 바로 어제다. redirect_uri 를 인코딩해서 내리는 게 금방 될 줄 알았는데!(그래서 url in url 형태를 막고 브라우저가 명확하게 인식하도록 하는 것) 삽질 과정을 정리해본다. 결론: Spring-Java에서 URL 뜯고 자원별로 뜯을 거면 URLComponentBuilder 쓰세요 첫번째 삽질 - split("&")로 query를 다 뜯어? 위와 같은 url…


Java, Code Review

내가 처음으로 받은 Java 코드리뷰 모음

같은 실수를 반복하는 멍청이는 되지말자는 의미에서ㅎㅎ PR을 쭉 보면서 받은 코드리뷰를 정리해보았습니다. 여러 번 반복해서 나오는 리뷰도 있네요.( 상수를 ~~제발~~ 위로 빼주세요ㅜ ) 스프링은 여태까지 했던 것 중에 제일 감을 못잡겠어서, 다른분들의 코드를 보면서 이해하고 있는데 리뷰를 받으면서 틀린 거 짚어주시니까 너무 기분이 좋고 호호 #…


Java, Lambda

자바 8의 함수형 인터페이스는 뭐에요

자바! 학교에서도 지속적으로 배우는 가장 익숙한 프로그래밍 언어 중 하나이다. 졸업때까지(2018) 만 해도 학부에서 파이썬이나 go 같은 트렌디한 언어가 아니라 자바를 한다고 하면 ??? 하고 바라보고, 고루한 언어처럼 여겨지기도 했다. 자바를 제대로 처음 배울 때는 2014년이었는데, 사실 이때 Java8이 릴리즈됐다. 그러나 그때의 자바 강의는 자바의 OOP…


Java

Java8 Datetime 대.정.리

??: 준영님 이 Date 무슨 형식으로 보내야해요? 그동안은 date는 무조건 서버에서 만들어서 넣어주는 것이어서 몰랐는데, date를 클라이언트(iOS앱) 에서 받을 일이 생겼다. DTO에는 해당 필드(createdDate라고 하자.) 가 ZonedDateTime인 건 알았는데, json 에서 어떻게 보내야하지? String 으로 말고..! 이러던 와중에 최근에 LocalDateTime DTO…


Spring, Annotation, Java

json을 펼쳐주는 @JsonUnwrapped

DTO DTO (Data Transfer Object) 는 클라이언트와 데이터를 교환하기 위해서 형식을 정해놓은 것이다. 예를 들어 화면에 상품과 그에 대한 리뷰가 같이 필요하다면, 와 같이 여러개를 감싸서 클라이언트에서 사용할 데이터만 쏙쏙 골라서 내려줄 집합인 것이다. json 모양이 복잡해 : nested json 그런데 위와 같은 DTO는 json…


Java, Spring, Annotation

Custom Annotation으로 유효성 검사하기

상황 어떤 값이 유효한지 검사를 해야 하는데, 해당 값은 entity나 DTO에서 받을 때 매번 유효성 검사를 해야한다. 이런 경우 대개 Validator를 사용해야하는데, Validator와 Annotation을 함께 사용하여 깔쌈하게 만드는 법을 알아본다. Annotation은 뭐더라 Annotation…


Java, Code Review

내받코리 1월,2월

이전에 내가 처음으로 받은 받은 JAVA 코드리뷰 모음 이라는 제목으로 글을 올렸었는데, 그 이후에도 이건 꾸준히 하면 좋겠다! 라는 생각이 들어서 또 다시 적습니다. 2월에는 Vue 공부도 조금했는데, Java 코드리뷰가 아닌 관계로 제외되었더니 양이 적네요. 보안이슈로 이전 API Deprecated 나중에 없앨 계획이시면 @deprecated…


Java, Regex

JAVA url 매핑 정규식 공유

테스트를 8개 정도밖에 만들지 못했지만, 일단 원하는 바에 부합하는 정규식인 듯 하여 블로그에 작성해 둡니다. http나 https로 시작하는 경우에는 ://가 반드시 붙는다. Optional. www. 로 시작하는 경우가 있다. Optional. 알파벳 혹은 숫자를 포함한 문자열이 반드시 1개 이상 있다. 이후에 . 이 반드시 하나 포함된다. ( . ) . 를 기점으로 이후에 소문자가 반드시…


DesignPattern, Java

스트레티지 패턴 🌚

HEAD FIRST DESIGN PATTERN 을 정리합니다. 02 옵저버 패턴보기 01 디자인 패턴 소개 , 그리고 스트레티지 패턴 상속의 문제점 서브 클래스에서 코드가 중복된다 모든 서브클래스의 행동을 알기가 어렵다 코드를 변경했을 때 원치 않는 서브클래스들에게 영향을 끼칠 수 있다 Duck 예제 Duck 종류를 총괄하는 Duck 클래스가 있다. 이를 상속하는 청둥오리도 있고 고무오리도 있다. Duck…


Java, Code Review

MIL(Monthly I learned) 4월 공유

TIL (Today I Learned) 는 매일 매일 배운 점을 적는 것인데요. 매일 매일 무언가를 지속해나간다는 건 참으로 힘든 일이네요. 그래도 다달이 하나쯤 공유하는 건 어렵지 않을 테니, 열심히 정리해보려고 합니다. DTO (Data Transfer Object) 만들 때 annotation 팁 필드 하나만 바꿔야 하면 JsonProperty, 클래스 레벨에서 전략을 적용해서 일괄로 바꾸려면 JsonNaming…


Java, Auth

Spring에서 HMAC-SHA256 인증해보기

이번에 외부 시스템과 연동을 진행하면서, 인증을 HMAC Signature 로 하게 되었는데요. HMAC이 가물가물해서 =) HMAC에 대한 간략한 소개와, Spring에서 어떻게 requestBody를 받아와서 HMAC Signature로 만드는지 샘플코드를 적어봅니다. HMAC? SHA-256? 이게 다 뭐야 😭 HMAC은 해싱기법을 이용해서 메시지의 위변조가 있었는지 체크하는 기법입니다. (Hash-based…


Java, Spring

Setter 설정안하고 set하기

상황 기존에 통합테스트로 돌고 있던 web client 테스트가 있다. 외부 API를 찔러보는 테스트인데, 이에 필요한 파라미터는 해당 web client 내부에서 가져오는 방식이다. 이때 무거운 통합테스트가 아니라, 직접 파라미터를 set해주는 가벼운 단위 테스트를 만들고 싶다. 기존 통합테스트 Custom Client 테스트해보고 싶은 메소드 요청에 필요한 baseUrl은 다음과 같이 @Value…


Java

[번역] 자바에서의 예외처리

과거에 썼던 dev 지식 모음을 보다가 아직 업로드하지 않은 것이 있어서 올립니다. Exception의 이해에 꽤 도움이 되었어서, 원문을 보시면 더 좋을 것 같습니다. Exception Handling in Java: A Complete Guide with Best and Worst Practices 위 문서를 요약, 번역하고 합니다. 필요한 경우 다른 정보를 추가합니다. Exception과 Exception…


JPA, Java

JPA 영속성 컨텍스트 정리

영속성 컨텍스트 JPA를 사용하고 테스트를 짜다보면 영속성 컨텍스트를 몰라서 오류를 겪게되는 일이 생긴다. 그래서 한번은 짚고 넘어가야겠다는 생각에 참고글을 나름대로 정리해보았다. 정의 영속성 컨텍스트는 엔티티를 저장하는 환경이다. 엔티티 하나하나를 식별자 값( @Id )로 구한다. 이 컨텍스트는 EntityManager 객체 당 하나가 만들어진다. (Manager…


Spring, Library, Java

Actuator 사용하기

Spring-boot 를 intelliJ에서 사용하면, 설정 시에 Actuator 를 사용할 수 있습니다. actuator는 스프링 부트 어플리케이션의 상태를 편리하게 확인할 수 있는 도구이지만, 그렇기 때문에 실 서비스에서는 공격 등을 대비하여 막아두어야하는 도구이기도 합니다. 오늘은 간단하게 actuator 의 명령어와, 실 배포 대비 방법을 알아봅니다. 소개 및 설치 Spring Boot Actuator…