Java43 [쿠링] Pattern 하나로 서버 OOM발생시켜 다운시키기 (Heap Dump 보기) 1. 처음엔 문제인 줄 몰랐다...현 쿠링은 엄청 비싼 인스턴스를 사용하지는 않고 있기 때문에 인스턴스 한대당 Memory가 512MB에 불과한 서버를 사용 중이다. (대신 값싼 거 3대로 운영 중) 심지어 메인서버는 Heroku이고, 테스트서버와 모니터링 서버는 AWS에서 기동중이다.(메인 서버 이전이 쉽지가 않다...) 다행히 지금은 메인서버를 AWS로 이전했고, test서버를 Heroku로 사용중이다! 평상시에는 크게 문제처럼 느껴지지 않던 부분이 시간적 여유를 갖고 보니 조금은 어색하게 느껴진 부분이 있었다.우선 다음 모니터링 기록을 살펴보자 ▶ Heap : G1 Eden Space ▶ Heap : G1 Survivor Space G1 Eden 영역에 수시로 생성되고 있는 양이 어림잡아 170MB.. BackEnd/쿠링 2024. 1. 18. [프로그래머스][Java] 택배 배달과 수거하기 (268) 직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 생각의 흐름 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 이문제를 보고 생각한 방식은 다음과 같았다. 1) 일단 10진수를 2진수로 변환한다 2) 변환된 2진수를 재귀적으로 (왼쪽, 중심, 오른쪽) 으로 나누어서 탐색하면서 판단하면 되겠다! 였다! 하지만 생각하지 못했던 부분이 있었는데, 10진수를 2진수로 변환한다고 끝나는 것 이 아니다... 변환된 2진수가 만약 포화 이진트리가 아니.. Algorithm/프로그래머스 2023. 5. 5. [TDD] 테스트를 위한 생성자, 메서드 피하는 방법 스스로 공부하다 경험했던 문제를 해결하기 위해 1. 문제 상황 테스트를 작성하다 보면 검증을 위해 id값을 직접 객체에 추가해줘야 하는 경우들이 있다. 하지만 JPA를 사용할 경우 프로덕션 코드에서는 생성자로 id를 직접 추가해주지 않아도, auto increment를 사용하게 되기 때문에 id값을 직접 할당할 필요가 없다. 따라서 단지 테스트 만을 위한 용도로 id값을 받는 생성자를 만들게 되는 점이 매우 거슬렸다. 예시를 통해 문제의 상황을 구체화 해보자! 우선 우리의 도메인을 시각화하면 다음과 같다. 다음과 같은 예시 코드를 살펴보자. @DisplayName("구간을 성공적으로 추가한다") @Test public void add_section_test() { // given Line line = n.. BackEnd/TDD 2022. 7. 26. [Java] Annotation Processor 이번시간에는 Lombok이 어떻게 동작하는지 그 핵심원리인 annotation processor에 대하여 학습해보자! 1. Lombok의 원리 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 annotation processor 는 compile 할때 중간에 끼어들어서 특정 annotation 이 붙어있는 소스코드를 참조하여 추가적인 소스코드를 삽입시킬 수 있다! 소스코드의 AST(abstract syntax tree)를 조작하는 것 이다! https://javaparser.org/inspecting-an-ast/ Inspecting an AST Inspecting an AST javaparser.org 원래는 AST 의 정보는 참조만 할 수 있고, 소스 코드를 조작할수는.. BackEnd/Java 2022. 6. 8. [Java] 바이트코드 조작하기 소스코드의 커버리지를 측정하는, 가령 Jacoco와 같은 tool들이 바이트코드를 이용하여 측정한다. 이러한 소스코드 커버리지는 내 전체 소스코드에서 얼만큼을 테스트로 커버 했는지? 를 알려주는 유용한 도구이다. 이번 시간에는 이러한 바이트코드를 직접 조작하는 방법에 대하여 공부하는 글이다! 1. Jacoco를 통한 코드 커버리지 측정 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 우선 간단하게 Jacoco를 사용하는 것부터 확인해보자. 테스트 해볼 간단한 코드는 다음과 같다. public class MeetUp { private int maxNumberOfAttendees; private int numberOfEnrollment; public void addPerson.. BackEnd/Java 2022. 5. 20. [Java] equals, hashCode 를 같이 구현하는 이유 이번글은 "Java에서 equals 와 hashCode를 왜 같이 구현할까?" 라는 의문에 대한 스스로의 답을 정리하는 글 입니다! 1. equals 만 재정의 할 경우 우선 설명에서 사용할 Item class를 살펴보자. public class Item { private String name; public Item(String name) { this.name = name; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Item item = (Item) o; return Objects.equals(name, item.. BackEnd/Java 2022. 5. 8. [REST API] 그런 REST API로 괜찮은가? naver D2 에서 발표를 보고 정리한 글 입니다. 문제될시 삭제하도록 하겠습니다! 다음 영상에 대한 정리를 간략하게 나마 해보았습니다! 1. 글을 쓰게 된 이유 그동안 REST에 대하여 명확하게 인식하지 못하고 무분별 하게 사용하고 있다는 느낌을 받았다. 따라서 관련된 영상중 가장 감명깊게 봤던 위 영상을 정리겸 복습하고 싶어 이 글을 작성하였다. 1) REST 란? REST는 REpresentational State Transfer의 약자이다. 하지만 위 글만 보고 이해할 수 있는 사람은.... 아마 창시자 정도?? 이에대한 부가적인 설명으로, 발표 영상에서는 다음과 같이 상호운용성 에 대하여 강조해 주셨다. a way of providing interoperability between comput.. Life/컨퍼런스 2022. 4. 17. [JPA] 엔티티 매핑 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 1. 객체와 테이블 매핑 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 ● @Entity 1. @Entity가 붙은 클래스를 엔티티 라고 하며, JPA가 관리한다. 2. JPA를 사용해서 테이블과 매핑할 클래스는 @Entity가 필수이다. 3. 주의사항 - 기본 생성자 필수(파라미터가 없는 public or protected) - final 클래스, enum, interface inner 클래스 사용 x - 저장할 필드에 final 사용 X 4. 속성 정리 - name 속성 JPA에서 사용할 엔티티의 이름을 지정할수가 있다. 만약 name 속성을 지정하지.. BackEnd/JPA 2022. 4. 2. [Java] Java 에서의 Thread, Light Weight Process 1. Green Thread Model (many-to-one) JVM 1.3 이전에는 JVM 내부적으로 스레드 모델을 가지고 있어 자체적으로 개발자가 멀티스레드 코드를 작성하여 실행하면 user thread가 실행된다. 이를 green thread model이라고도 부른다. 이러한 모델은 어떠한 OS의 지원없이 완벽하게 JVM으로부터 관리되는 방식이다. user thread는 개발자 입장에선 thread이지만 실제 하드웨어, 운영체제와 상관없이 JVM이 관리하는 thread로 실행되었다. 또한 한번에 단 한개의 user thread 만이 처리가 될 수 있기 때문에 이러한 모델을 many-to-one 모델이라 부른다. 이러한 many-to-one 모델인 green thread model 은 multi-c.. BackEnd/Java 2022. 3. 30. [Spring] API 예외 처리 - 2 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 5. 스프링이 제공하는 ExceptionResolver1 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 스프링 부트가 기본으로 제공하는 ExceptionResolver 는 다음과 같다. HandlerExceptionResolverComposite 에 다음 순서로 등록되어 있다. 1. ExceptionHandlerExceptionResolver : @ExceptionHandler 를 처리한다. 2. ResponseStatusExceptionResolver : HTTP 상태코드를 지정해줄수 있다. 3. DefaultHandlerExceptionResolver.. BackEnd/Spring MVC 2022. 3. 15. [Spring] API 예외 처리 - 1 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 1. 시작 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 API의 예외 처리는 기존과 다르다. 이전처럼 단순하게 고객에게 오류 페이지를 보여주는것으로 끝나지 않는다. API 방식은 각 오류 상황에 맞는 오류 응답 스펙을 정하고, JSON으로 데이터를 내려주어야 한다. ● ApiExceptionController - API 예외 컨트롤러 @Slf4j @RestController public class ApiExceptionController { @GetMapping("/api/members/{id}") public MemberDto getMember(@Pa.. BackEnd/Spring MVC 2022. 3. 14. [Spring] 예외 처리와 오류 페이지 - 2 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 6. 스프링 부트 - 오류 페이지 1 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 이전글에서 예외 처리 페이지를 만들기 위해 복잡한 과정을 거쳤다. 1) WebServerCustomizer 를 만들고 2) 예외 종류에 따라서 ErrorPage 객체를 추가하고 3) 예외 처리용 컨트롤러 ErrorPageController를 사용자가 직접 만들었다. 스프링 부트는 이러한 과정을 전부 기본적으로 제공한다. 1) ErrorPage를 자동등록 한다. 이때 경로는 /error 이라는 기본 경로로 오류 페이지를 설정한다. 따라서 서블릿 밖으로 예외가 발생하거나, r.. BackEnd/Spring MVC 2022. 3. 14. 이전 1 2 3 4 다음