본문 바로가기

java

(11)
[끄적끄적] Effective software testing 적용기 Effective software testing Effective software testing책의 내용을 프로젝트에 적용해가며 느꼈던 인사이트를 공유하는 회고성 글 입니다. 왜? 최근 TDD, ATDD와 같은 "테스트가 주도하는 개발" 방법론을 개발에 적용해 개발하고 있었다. 이 방법론 덕분에 팀의 코드는 테스트하기 쉬워졌고, 높은 테스트 커버리지를 달성할 수 있었다. 심지어, 높은 커버리지(96퍼 였던거로 기억함)는 모든 기능이 정상적으로 동작함을 보장해주는듯 했다. 이러한 생각이 깨지는데는 그렇게 긴 시간이 걸리지 않았다. 실제로 우리 팀은 96퍼나 되는 커버리지를 달성했음에도 mocking 처리된 데이터베이스로 인해 예상치못한 에러상황(보러가기) 을 겪은적이 있다. 우리의 테스트는 왜 실패했을까?..
[끄적끄적] Jacoco multi-module 자동화 적용기 [끄적끄적] Jacoco - multi-module 적용기 multi module project에 jacoco를 적용하는중 겪었던 어려움과 해결방법을 작성한 글 입니다. 우선, 제가 만든 jacoco관련 gradle 파일은 다음과 같습니다. 1. 새롭게 생성되는 모듈 jacoco-aggregtaion 대상으로 등록 자동화 2. 새롭게 생성되는 모듈 test coverage 측정 대상으로 등록 자동화 3. coverage-exclude.luffy (저희 프로젝트 내부에서 사용하는 파일입니다) 에 exclude할 패키지 지정하면 모든 테스트와 reports에서 제외 자동화 https://github.com/depromeet/na-lab-server/blob/main/gradle/jacoco.gradle Gi..
[Java] Future.cancel() vs CompletableFuture.cancel() [Java] Future.cancel() vs CompletableFuture.cancel() CompletableFuture의 cancel은 우리의 예상과 달리 동작하고 있는 스레드를 완료 시킬 수 없다. 이 걸 모르고 개발하다가 버그가 발생한 적이 있는데, 이번 글 에서는 CompletableFuture의 cancel과 Future의 cancel의 차이에 대해 알아보겠다. Future 테스트 우선, Future를 이용해 비동기 서비스를 실행하고, 해당 스레드를 도중에 중단시킬수 있는지 확인해보겠다. 로직은 다음과 같다. 1. 10초동안 sleep 동작을 하는 스레드를 실행시킨다. 2. 해당 스레드에 강제로 InterrupedException을 발생시킨다. (cancel이용) 3. Interrupted..
[백준 / BOJ] 1195 킥다운 문제 출처 : https://www.acmicpc.net/problem/1195 1195번: 킥다운 첫 줄에는 첫 번째 기어 파트를 나타내는 1과 2로 구성된 문자열이 주어진다. 두 번째 줄에는 마찬가지로 두 번째 기어 파트를 나타내는 1, 2로 구성된 문자열이 주어진다. 여기서 1은 홈을, 2는 www.acmicpc.net 두개의 기어파트가 주어진다. 각 기어파트는 1과 2로 이루어져있는데, 1은 '홈(들어가있는 부분)' 2는 '이(나와있는 부분)'를 나타낸다 이 때, 두개의 기어파트를 적절히 조합하여 조합된 기어파트의 길이의 최솟값을 구하는 문제다. 풀이 기어의 길이가 최대 100이므로 완전탐색으로 풀리는 문제다. 문제에서 주어진 그대로 구현하면 되는데, 몇가지 주의할 점 이 있다. - 기어가 맞물린..
[Java] Java Heap Stack Static 프로세스 와 스레드 자바의 메모리 구조를 이해하기위해선, 우선 프로세스와 스레드의 차이를 알아야한다. 프로세스 프로세스는 운영체제에서 할당받는 하나의 공간으로 각각의 프로세스는 독립적인 자원을 갖고있다. (하나의 응용프로그램이라고 생각해도 된다.) 각 프로세스는 운영체제로 부터 아래의 독립적인 공간을 제공받는다. - CPU시간 - 메모리 주소 - Stack, Heap, Code, Data... 스레드 스레드는 프로세스의 실행단위이다. 모든 프로세스는 하나의 메인 스레드를 갖고있으며, 프로세스내의 동작은 스레드를 통해서 이루어진다. 하나의 프로세스는 여러개의 스레드를 만들수 있으며, 아래와 같은 특징을 갖고있다. - 스레드는 독립적인 Stack 영역을 갖고있다. - 스레드는 Stack영역을 제외한 프로세스..
[JPA] 연관관계 매핑 연관관계 매핑 1. @OneToMany, @ManyToOne @OneToMany와 @ManyToOne은 이름 그대로, 일대다, 다대일 연관관계를 정의한다. 우선 단방향 연관관계 매핑과 양방향 연관관계 매핑 코드를 살펴보자. /* 단방향 연관관계 매핑 */ @Entity public class A{ @Column(name=B) @ManyToOne @JoinColumn(name="B_ID") private B b; } @Entity public class B{ @Id @Column(name="B_ID") private Long bId; } 1. 연관관계 매핑 어노테이션인 @ManyToOne, @OneToMany...은 자신의 상태를 앞에 작성한다. 따라서, 위 코드에서는 A가 Many, B가 1에 해당한다...
[Cloud 9 / linux] jsp / servlet 개발환경 세팅하기 (2) Cloud9 Jsp / Servlet 개발환경 세팅하기 (2) cloud9은 아마존에서 제공하는 온라인 IDE로 python, js, java, c, c++ ...등 거의 대부분의 언어를 지원? 한다. 다른 ide와 차이점이자 가장큰 장점은, 1. 그냥 컴퓨터 한대를 빌려서 사용하는거라는 생각이 들정도로 자유도? 가 높고, 세팅을 마음대로 할수있다. 2. 또한, EC2환경에서 개발을 하는것이기 때문에, 서버 배포시 매우 매우 매우 매우 매우 편리하며 오류를 줄일수있다. (cloud9과 서버가 같은 환경일 가능성이 높으므로, cloud9에 적용한 설정을 그대로 서버로 가져와 적용하면 된다.) (하지만 정상적인? 상황이라면 그냥 eclipse나 Intelij를 쓰도록하자..) Cloud9 Jsp / Serv..
[Cloud 9 / linux] jsp / servlet 개발환경 세팅하기 (1) Cloud9 Jsp / Servlet 개발환경 세팅하기 (1) cloud9은 아마존에서 제공하는 온라인 IDE로 python, js, java, c, c++ ...등 거의 대부분의 언어를 지원? 한다. 다른 ide와 차이점이자 가장큰 장점은, 1. 그냥 컴퓨터 한대를 빌려서 사용하는거라는 생각이 들정도로 자유도? 가 높고, 세팅을 마음대로 할수있다. 2. 또한, EC2환경에서 개발을 하는것이기 때문에, 서버 배포시 매우 매우 매우 매우 매우 편리하며 오류를 줄일수있다. (cloud9과 서버가 같은 환경일 가능성이 높으므로, cloud9에 적용한 설정을 그대로 서버로 가져와 적용하면 된다.) (하지만 정상적인? 상황이라면 그냥 eclipse나 Intelij를 쓰도록하자..) Cloud9 Jsp / Serv..