Languege/Java & Spring

Languege/Java & Spring

[String Constant Pool] Heap? PermGen? 오해와 진실

🎈 개요 기술 면접을 준비하고 보던 도중, 한 면접관님께서 이런 질문을 하셨습니다. Q.문자열을 String str = "hello"; 라고 선언하면 어떻게 되나요? A.JVM 메모리 내의 Heap 영역에 있는 String Constant Pool에 저장이 됩니다. Q.String Constant Pool이 Heap영역에 저장되는게 맞아요?? 저는 당연히 Heap 영역 내부에 저장되는거 아니야? 라고 생각했습니다.(블로그를 통해서 학습 하신분은 반은 맞다. 라고 생각하실 수 있을거 같아요, 보통 Heap안에 PermGen안에 String Constant Pool이 있다고 설명함) 정확히, JAVA 7까지는 Permgen에 저장되고 JAVA 8 이후부터는 NativeMemory 내부의 Metaspace에 ..

Languege/Java & Spring

Stream 사용법

💥 개요 우테코 3주차 코드리뷰 진행 중 Lotto를 파라미터로 받은 개수만큼 새로운 객체를 생성하는 코드를 만드는데, 더 좋은 코드를 추천해주셔서 Stream의 활용과 심화에 대해 알아야겠다. 라고 생각했다. 1. Stream 생성하기 Java에서 Stream을 생성하는 방법은 다양합니다. 컬렉션, 배열, 특정 범위의 숫자 등에서 Stream을 생성할 수 있습니다. List list = Arrays.asList("a", "b", "c"); Stream stream = list.stream(); 2. Stream 가공하기(중간연산) Stream을 가공하는 중간 연산에는 여러 가지가 있습니다. 이들은 Stream을 변형하지만, 최종 연산이 호출되기 전까지는 실행되지 않습니다. [ 필터링 - Filter ]..

Languege/Java & Spring

RestAssured session 사용시 default value 저장

RestAssured로 api 테스트시 로그인 session을 매번 Cookie를 요청마다 실어주어야 하는지, 다른 방법은 없는지 궁금증이 생겼다. 그렇게 RestAssured 공식 문서와 구글링을 통해 알아낸 방법은 아래와 같다. .cookie("JSESSIONID", sessionId) 🎈 RestAssured 세션 기본값 설정하는 방법 방법은 아주 간단하다. RestAssured.sessionId = 설정할 세션id 와 같이 지정하면 끝이다. var response = 로그인요청(request); RestAssured.sessionId = response.cookies().get("JSESSIONID"); ✨ RestAssured JWT(Oauth2) 기본값 설정하는 방법 현재 프로젝트는 폐쇄망에서..

Languege/Java & Spring

Junit5 상속관계에서 BeforeEach 순서

최근 TDD와 테스트 코드에 사랑에 빠져 사내 프로젝트에 테스트 커버리지를 높이고 있는데 Api 테스트를 할때 보통 로그인이 전제가 되어야 하는데, 도메인 별 테스트를 만들때마다 계속 반복되는 로그인을 하는 로직을 넣는 바보같은 행동을 하고 싶지 않아서 ApiTest를 만들어두고 이곳에 로그인 로직을 두고 Domain 별 테스트에서는 API만 테스트하려 하는데 이때 beforeEach의 순서를 정해야 하는 일이 발생했습니다. Junit5 상속관계에서 BeforeEach 순서는 어떻게 될까? 아래 코드에서 보면 ApiTest의 setUp이 먼저 실행되는걸 확인할 수 있습니다. public class DomainTest extends ApiTest { @BeforeEach void setUp1() { Sys..

Languege/Java & Spring

스프링부트 Could not find mysql:mysql-connector-java:.

Could not find mysql:mysql-connector-java:. h2-db에서 erd를 뽑으려고 mysql로 전환하던 도중 위의 오류가 발생하였습니다. 원인은 간단합니다. 아래와 같이 gradle에 설정하였을텐데 최신 버전에는 변경되어 runtimeOnly 'mysql:mysql-connector-java' 아래와 같이 작성하면 정상 동작합니다. runtimeOnly 'com.mysql:mysql-connector-j'

Languege/Java & Spring

스프링부트 어노테이션이란? 커스텀 어노테이션 추가하는 방법

어노테이션이란? 어노테이션은 소스 코드에 메타데이터를 추가하기 위한 것으로, 스프링부트에서는 다양한 용도로 사용됩니다. 1.스프링 빈(Bean) 등록을 위한 어노테이션 - @Component, @Controller, @Service, @Repository 등 - 해당 어노테이션이 붙은 클래스는 스프링 컨테이너에서 빈으로 관리됩니다. 2.의존성 주입(Dependency Injection)을 위한 어노테이션 - @Autowired, @Resource 등 - 해당 어노테이션이 붙은 필드나 생성자 등에 의존성 주입이 자동으로 이루어집니다. 3.스프링 MVC에서 컨트롤러(Controller)를 위한 어노테이션 - @RestController, @RequestMapping, @GetMapping, @PostMapp..

Languege/Java & Spring

[JAVA] 리스트 null로 초기화

🎈 Q & A 오카방을 통해서 자바, 스프링에 대해서 나도 기초를 쌓고, 공부도 하고, 사람들에게 도움을 주기 위해 자바 스프링을 알려주는 카톡방을 몇달전에 열어뒀는데 오늘은 한분이 나도 처음에 많이 헤맸던 예제를 물어보셔서 그것에 대해서 적으려고 한다. 항상 질문하실때마다 모르는걸 물어보면 좋겠다(?)라는 생각을 하게 되는데, 오늘 질문은 아 이거 블로그 포스팅 해두면 좋겠다 싶어서 먼저 말씀을 드리고 포스팅을 한다. 🎈 문제 간단하게 이 분의 말은 로직 작성 중 에러가 나는 부분이 있는데 그게 뭔지 도저히 모르겠다는 말... 그리고 stream을 사용하셨는데 이게 문법적으로 상관없는지.. 를 물어보셨고 나는 stream의 foreach 통해서 add해도 괜찮지만 stream의 원래 사용 목적을 생각하..

Languege/Java & Spring

[JPA] DynamicUpdate 안되는 문제

현재 JPA를 사용하며 간단한 사이드 프로젝트를 만들고 있던 중 리펙토링을 진행하고 있는데 update시 DynamicUpdate가 걸려있는 entity를 update 할 때 문제가 발생하였습니다. 🎈 Paper Entity @NoArgsConstructor(access = AccessLevel.PROTECTED) // new 클래스() 제한 @ToString(callSuper = true) @EqualsAndHashCode @Getter @Entity @DynamicInsert // null로 들어가야 하는 경우 대응(기본값) @DynamicUpdate // 변경한 필드만 대응 @Table(name = "tbl_paper") public class Paper { @Id @GeneratedValue(st..

mntdev
'Languege/Java & Spring' 카테고리의 글 목록