스터디/네트워크

자원을 수정하는 HTTP 메서드 - PUT vs PATCH

우아한 테크코스에서 같이 글쓰기 근로를 하는 보스독과 함께 작성한 글이다. 들어가며 웹 API를 설계할 때, 최대한 Http 표준을 따라서 용도에 맞는 Http Method를 사용해야 한다는 것은 아마 많은 개발자들이 인지하고 있을 것이다. 이번 글에서는 Http Method 중 특히 자원(엔티티)을 수정하는 용도로 사용하는 Put과 Patch에 대해 다뤄보고자 한다. 개발자들 중에는 Put과 Patch의 차이를 크게 생각하지 않고 아무거나 선택하거나 혼용하여 API를 만드는 사람도 있다. 정말로 두 메서드를 구별없이 사용해도 괜찮은 걸까!? 여기 지하철 노선 정보를 수정하는 자바스크립트 코드가 있다. 지하철 노선(Line)은 이름(name), 첫 차 시간(startTime), 마지막 차 시간(endTi..

2020.09.21 게시됨

생각/회고

우아한 테크코스 레벨3 회고 - 팀 프로젝트가 나에게 남긴 것

🖋 팀 프로젝트가 나에게 남긴 것 새로운 팀 프로젝트는 언제나 환영이야 팀 프로젝트는 언제나 큰 동기부여가 돼요. 무료한 일상에 큰 도전과제가 생기고 자극제가 되기 때문이에요. 사실 언제나 환영이라고 쓰긴 했지만, 걱정이 태산이었어요. 겉으로는 좋아하는 척하지만 속으로는 '큰일 났다! 어떡하지!' 한 것도 사실이거든요! 이런 걱정은 팀 프로젝트를 마음에 들 정도로 완성한 적이 없어서 그랬던 것 같아요. 지금까지 진행했던 프로젝트를 실제 고객에게 제공할 수 있냐고 물어본다면 대답은 '아니오' 거든요. 그럼에도 팀 프로젝트를 하는 것은 큰 성장동력이 되기 때문에 정말 좋아해요. 탐험가들이 미지의 세계로 탐험을 떠나 새로운 경험을 하는 것처럼 이번에는 어떤 이슈가 발생할까? 어떻게 해결할 수 있을까? 와 같은..

2020.08.30 게시됨

생각/회고

우아한 테크코스 레벨2 회고 - 나만의 효과적인 공부법

우테코에서 찾은 나만의 효과적인 공부법 기록보단 기억을 기억보단 기록을, 구글에서 스프링과 관련된 게시글을 찾으면 대부분 최상위에 나오는 블로그의 이름이에요. 우아한 형제들에서 근무하고 계신 이동욱(jojoldu) 님의 기술 블로그인데, 이동욱 님은 자신을 나타내는 가장 좋은 말이라고 인터뷰에서 말씀하시더라고요. 지방대 개발 비전공자가 배달의민족 리드 개발자가 되기까지 가끔 친구가 우스갯소리로 자신은 기록보단 기억을 이라고 하는데, 우테코를 시작하기 전까지의 저를 나타내는 말 중 하나이지 않을까 싶어요. 기존에 진행하던 스터디에서 다양한 지식을 얻었지만 기억하려고 노력을 했지 기록을 꾸준히 한 건 아니거든요. 더구나 기록하는 걸 즐기는 편도 아니었고요. 글을 쓰는 게 재미도 없고, 글을 잘 쓰지도 못하니..

2020.08.23 게시됨

생각/회고

우아한 테크코스 레벨1 회고 - 테크코스 한달 생활기

우아한 테크코스 한 달 생활기 한국이요! 빨리요! 우아한 테크코스(이하 우테코) 오프라인 테스트를 치른 다음 날 유럽으로 보름 정도 여행을 갔다. 6개월간의 인턴이 끝이 나서 조금 쉬고 싶은 마음이었다. 그런데 여행 도중에 우테코 합격 메일을 받았다. 쉬고 싶은 마음은 사라지고 여행 내내 빨리 한국에 돌아가 교육을 듣고 싶었다. 이는 이전에 포비의 강의를 들은 적도 있고 코치들의 리뷰를 받은 적이 있기 때문이다. 그때 정말 많은 것을 배우고 성장한 느낌이 들어서 좋았다. 그리고 우테코에서 한 번 더 성장할 수 있을 거란 생각에 기분이 좋았다. 갑자기 분위기 연극 우테코에 들어와서 처음으로 진행하는 온보딩 미션의 마지막 미션은 팀 연극이다. 프로그래밍 교육을 들으러 왔는데 연극을 해야 해서 처음에 마냥 긍..

2020.08.23 게시됨

스터디/스프링

Spring Boot 로컬 환경에서 정적 리소스 리로드 하기

로컬 환경에서 정적 리소스 리로드 하기 개요 우테코 레벨 2를 진행하면서 웹 페이지, 특히 js를 많이 작성하게 됐습니다. 그러다 보니 정적 파일(특히 js)을 수정하면 Spring boot에서 실행중이던 app을 재시작해서 수정된 정적 정보를 다시 불러와야 했습니다. Spring devtools 의존성을 추가해서 리로드 하는 방식이 있지만 빌드 속도가 느려지고 개발환경 외에 사용되지 않는 의존성을 추가하고 싶지 않았습니다. 게다가 필자는 설정해도 됐다 안됐다 하네요;; 얼마전 WebMvcConfigurer에서 resourceHandler를 다뤘는데 이를 이용하면 간단하게 해결이 된다는 것을 알게되어 공유하고자 합니다. 바라보는 정적 리소스의 위치 수정하기 아래는 이전에 작성한 classpath 아래의 ..

2020.05.22 게시됨

스터디/스프링

Spring Boot HTML 파일 templates에서도 읽도록 설정하기

static 아닌 폴더에서 정적 정보 읽어오기 스프링 부트에 web 의존성을 추가하고 localhost:8080으로 접근하면 기본적으로 resources 폴더에 있는 static 에 위치한 index.html 파일을 읽게됩니다. 프로젝트를 생성하고 다음과 같이 index.html을 생성하여 static 에 위치시키고 애플리케이션을 실행후 localhost:8080으로 접근하면 다음과 같이 index 페이지가 출력되는것을 확인할 수 있습니다. static 에서 접근하는 것은 문제가 없습니다. 그러나 html 파일들은 static이 아닌 resources 밑에 templates 폴더에서 관리를 하고 싶어진다면 문제가 발생합니다. 아래와 같이 home.html을 resources 밑 templates에 위치시..

2020.05.18 게시됨

스터디/클린코드

Jacoco Counter LINE vs INSTRUCTION

Jacoco Counter Line vs Instruction Jacoco 커버리지 종류에 여러가지가 있지만 Line와 Instruction은 비슷하지만 엄청난 차이를 일으킨다. 커버리지 측정방식이 다른데 Line의 경우 테스트 스레드가 읽고 지나간 소스 코드의 Line을 측정한다. 하지만 Instruction의 경우 지나간 바이트 코드를 측정한다. 위 두 줄을 읽고 이해가 되면 그냥 뒤로가기 눌러서 나가면되고! 이해가 잘 되지 않으면 아래 예제를 통해 확인해 보도록 하자. 설정 build.gradle에 설정은 다음과 같이 하였다. Junit5와 assertJ를 사용하기위해 의존성을 추가하였다. plugins { id 'java' id 'jacoco' } group 'org.javabom' version..

2020.03.15 게시됨

스터디/클린코드

좌충우돌 jacoco 적용기

스터디 블로그 코드블럭 상태가 이상해서 먼저 여기에 올린당.. 좌충우돌 Jacoco 적용기 백기선님의 더 자바 강의를 보던 중 바이트 코드를 다루는 방법의 예시로 jacoco가 언급되었고 테스트 커버리지를 측정하여 build를 성공, 실패 시킬수 있다는 점을 알게되었습니다. 이를 이용하여 ''스터디에서 진행하는 장기 프로젝트와 토이 프로젝트에 적용하면 재미있겠다!' 라는 생각에 적용하며 겪은 내용을 정리해 보고자 합니다! Jacoco 적용하기 단순히 적용하는 것은 어렵지 않았습니다! jacoco 유저 가이드와 우아한 형제들의 jacoco 포스팅을 보면서 쉽게 적용할 수 있었습니다. jacoco plugin 추가 먼저 plugins 블록에 id 'jacoco' 를 추가해 주면 plugins { id 'ja..

2020.02.29 게시됨

스터디/이펙티브자바

[아이템7] 다 쓴 객체 참조를 해제하라

아이템 7 다 쓴 객체 참조를 해제하라 메모리 누수의 주범이다. 사용을 마친 객체의 참조를 해제할 때 null을 이용하여 객체 참조를 해제하는 방법도 있지만, 이는 지양하도록 하라. 가장 이상적인 방법은 참조를 담은 변수를 유효 범위 밖으로 밀어내는 것이다. 캐시 또한 메모리 누수를 일으키는 주범이니, 캐시 외부에서 키를 참조하는 동안만 엔트리가 살아 있는 캐시가 필요하다면 WeakHashMap을 사용해 캐시를 만들도록 하자. @DisplayName("HashMap 테스트") @Test void test1() { //given Map map = new HashMap(); Foo key = new Foo(); map.put(key, "1"); //when key = null; System.gc(); //t..

2020.01.28 게시됨