We will find a way, we always have.

-interstellar

분류 전체보기 256

[우테코 레벨2] 12주차 회고 (페이크 객체, 선릉캠, 돌아보기)

월요일 어린이날은 푹 쉬고 화요일에 열심히 코딩을 하고 클라이밍 하러 갔다. 백엔드 크루는 아루, 이든, 리니가 갔었고 프론트엔드 크루 낙타도 함께 갔다.    캠퍼스 내에 "모의 객체를 사용하지 않음으로써 테스트 충실도 높이기"라는 대자보가 붙었다.   이번 미션을 페어의 코드로 사용했었는데, 페어는 페이크 객체를 사용해 테스트를 하고 있었다. 구현을 하는 도중에 페이크 객체의 문제점을 몸소 느꼈다. 일단 실제 객체는 sql을 직접 사용하여 db에 쏘는 형태였는데, 페이크 객체는 JCF를 사용하고 있었다. 때문에 내가 작성한 sql의 검증을 페이크 객체로는 확인할 수 없었다. 예를 들어 existById 같은 메서드를 사용해도 실제 객체는 쿼리를 날려 확인을 하는데 페이크 객체는 쿼리를 날리는 게 아니..

[우테코] 방탈출 예약 관리 미션 회고

레벨 2의 첫번째 미션 방탈출 예약 관리 미션은 페어 감자🥔, 리뷰어 오리 🦆 와 함께 했다.  웹 개발 경험으론 스프링을 배운 상태였지만 로컬 서버에만 띄어보고 배포해본적은 없었다. 대신 파고(파이썬 장고)로는 해본적 있었다. 레벨 1 끝날 즈음에 레벨 2엔 어떤 미션을 하게 될지 기대가 많이 됐었다. 이전 기수들을 보면 레벨2의 첫번째 미션은 레벨 1 때 했던 미션을 스프링 버전으로 변경하는 미션이었어서 이번에도 그렇게 될 줄 알았는데, 완전 다른 미션이 주어졌다.  방탈출 예약 관리 미션으로 예약을 추가하고, 예약 시간을 추가하는 미션이었다. 1~3단계는 스프링으로 Hello World!, 4~6단계는 DB 적용!, 7~9단계는 요구사항 변경! 이런 느낌이었다. 대부분 1~3단계로 step1, ..

[우테코 레벨2] 11주차 회고 (방탈출 사용자 예약 미션, 크론과 첫만남)

레벨 2의 첫 미션을 마무리하였다.  스프링을 도입 후 첫 미션이었는데, 나름 잘 마무리 한거 같다.사실 뭔가 10단계도 도전해볼 수 있었을 거 같은데, 주말에 술마시고, 클라이밍 가고 놀았다. 쉬엄쉬엄 하자 🍻🧗‍♂️  레벨 1 사다리였나 블랙잭이었나 튼 후반부쯤 부터 시작되지 않은 미션의 미션 시작 버튼을 눌러 다음 미션의 리뷰어를 확인하곤 하였다. 같이 모여서 확인하고 공개된 리뷰어의 성향 혹은 꿀팁 같은 것들을 공유하는게 나름의 재미였다. 레벨 2의 두번째 리뷰어를 확인한 결과 블랙잭때 만났던 수달이었었다!🦦블랙잭때 수달과 재밌게 리뷰한 경험이 있어 이번엔 또 어떤 재미난 경험을 할 수 있을지 기대하고 있었지만;;;  금지당했다 😅 이유는 페어가 매칭되기 전에 리뷰어를 매칭하게 된다면 페어..

[Spring] 애플리케이션과 테스트 동시에 실행하기(RestAssured 포트설정)

레벨2에선 이제 스프링을 사용하기 시작했다.멋들어지게 스프링을 사용하고 요구 사항을 만족하여 테스트를 돌려봐도 다 잘 돌아갔다. 하지만 애플리케이션을 띄우고 테스트를 실행하면 에러가 발생했다.   왜일까 문제 해결을 위해 고민해보자.  🙋‍♂️: 애플리케이션을 띄우지 않고는 테스트가 성공했으니, 테스트를 돌릴 때마다 애플리케이션을 종료하고 테스트를 돌리면 되지 않나요? 👨‍💻: 애플리케이션을 종료하면 안되는 상황이거나 애플리케이션을 재가동 시킬 때 많은 시간이 소모된다면? 🙋‍♂️: 흠... 어쩔 수 없네요. 다른 방법을 찾아보죠. 에러 로그를 쭈욱 내려다보면    org.springframework.boot.web.server.PortInUseException 이라고 다시 말해 포트는 이미 사용..

Spring 2024.05.04

[리뷰] 함수형 프로그래밍 with 자바

"한빛미디어 활동을 위해서 책을 제공받아 작성된 서평입니다."   함수형 프로그래밍을 사용한다면 코드를 간결하고 효율적으로 표현할 수 있다. 또한 복잡한 로직을 읽기 쉽게 리팩토링할 수 있으며 재사용 가능한 코드로 만들어준다.  이전까진 '모던 자바 인 액션'을 통해 함수형 프로그래밍을 배웠다면 이제는 '함수형 프로그래밍 with 자바'로 함수형 프로그래밍을 배워도 좋을 거 같다고 생각한다. 모던 자바 인 액션도 람다와 함수형 프로그래밍을 다루지만 자바 8로 다루기 때문에 살짝 올드한 면이 있다.  함수형 프로그래밍 with 자바에선 자바 17를 사용하고 있어 record나 새로운 스트림 문법들을 사용하여 좀 더 young하다고 생각한다.  자바와 관련한 좋은 레퍼런스 북이 생겨 뿌듯하다:)

Blah blah 2024.04.28

[우테코 레벨2] 10주차 회고 (단체 데일리, 스프링 학습 방법)

벌써 10주차라니 말도안되지만 회고를 시작해보겠다. 단체 데일리처음으로 단체 데일리를 하였다. 레벨1때 조끼리 연극을 했다면 이번에는 피지컬 100 아니 우지컬 100을 진행하였다.마라톤 했던 짬바가 아직 남아있어 한발로 오래버티기 할 수 있었다. 🤸‍♀️🤸‍♂️ 일일 레크레이션 강사 리사가 힘을 써주었다.  레벨2 잘 헤쳐나가기 4가지의 주제로 백엔드 살롱이 오픈한다고 하여 나는 2번과 4번 중 고민하다가 2번에 참여하였다.   레디, 배키, 짱수 그리고 트레 이렇게 총 4명이 2번 주제로 솔라와 이야기를 나눴다.  우선 나의 상황은 스프링을 인강으로만 들어보고 스프링으로 프로젝트를 만들어 본 경험은 없는 상태였다. 다시 말해 나의 스프링 공부 방법은 다른 사람이 떠먹여주는 공부였지 스스로 공식문서..

[우테코 레벨2] 9주차 회고 (새로운 데일리 조, 방탈출 예약 관리)

새로운 데일리 조 일주일 방학을 마치고 레벨 2가 시작되었다. 데일리조가 변경되었는데 이번에도 브라운조가 되었다. (한번 브라운조는 영원한 브라운조) 새로운 데일리조는 냥인, 망쵸, 커찬, 폭포, 리브, 도비, 호기, 제리, 테드이다. 👋 레벨 1때 이야기 나눠본 크루도 있고, 닉네임만 들어본 크루도 있다. 이중 제일 먼저 만난 크루는 아마도 망쵸인데, 망쵸와의 첫 만남은 한별이(solved.ac 캐릭터 이름) 덕분이었다. 우테코 첫주에 내 노트북에 붙어있는 한별이 스티커를 보고 먼저 말을 걸어주었었고 그렇게 친해졌다. 새로운 데일리 조는 어떨지 기대된다:) 레벨 2 OT 레벨 2에서는 이제 스프링을 사용하여 미션을 진행한다. 요리로 비유해본다면 레벨 3가 식당 오픈이고, 레벨 2가 식당 오픈 전, 레시..

[Spring] @ResponseBody vs ResponseEntity

서론스프링을 사용할 때 컨트롤러에서 직렬화할 데이터를 반환할 때 @ResponseBody를 사용할 지 ResponseEntity를 사용할 지 토론이 이어졌다.무엇을 사용하는게 좋을 지 살펴보자.본론@ResponseBody @ResponseBody는 스프링 버전 3.0에 등장한 녀석이다. 이 녀석을 사용한다면 반환값을 HttpMessageConverter를 통해 응답 바디로 직렬화할 수 있다.    위 코드는 스프링 @ResponseBody의 코드이고 아래는 @ResponseBody 사용 예시이다.  /reservations 로 GET 요청이 올 때 동작하는 메서드인데 @ResponseBody 사용방법이라고 해놓고 @ResponseBody 애노테이션은 보이지도 않는다. 무슨일인걸까??!!! 정답은 @Res..

Spring 2024.04.21

[자바] final에 美친놈

서론 우테코 레벨1 때 첫번째 미션이었던 자동차 경주 미션과 마지막 미션인 체스 미션의 main 메서드를 살펴보면 눈에 띄게 달라진 게 있다. 바로 final main의 파라미터인 args에도 final, 로컬 변수에도 final, try catch 문에서 잡은 예외에도 final이 붙어 있다. 제일 처음 꼬신건 :네오:였다. 문자열 덧셈 계산기 피드백 강의를 보는데 코드 여기저기서 final을 볼 수 있었다. 그때부터 이녀석에게 관심을 갖기 시작했다. 그럼 이제 final이 뭐길래 얘는 필사적으로 final을 붙이려고 하는지 알아보자. 본론 final 키워드를 추가할 수 있는 곳은 여럿 있는데 각각 의미가 다르다. 클래스 상속 제한 메서드 오버라이딩 제한 변수 재할당 제한 여기서 나는 변수에 초점을 두..

[자바] 내가 커스텀 예외를 사용하게된 이유 (IllegalArgumentException, IllegalStateException)

서론지금까지 도메인 요구 사항에 맞지 않는 입력이 들어온다면 주로 IllegalArgumentException를 사용하였고 파라미터로 어떤 예외인지 메시지를 담아 의미를 전달하였다. 이녀석이 뭐 특별한 기능을 제공하느냐? 라고 물어본다면 네니오라고 답할 수 있다. IllegalArgumentException이 제공하는 기능은 의미를 전달하는 것이다. 다시말해 유효하지 않은 인자가 왔다는 의미를 전달하는데 요게 바로 특별한 기능이다. 나는 이 IllegalArgumentException 안에 메시지를 넣어 예외를 다르게 표현하는 방식을 사용해왔다. 프리코스 때 뿐만 아니라 우테코 들어와 자동차 미션, 사다리 타기 미션 때까지만하여도. 이때까진 커스텀 예외를 사용하는 크루를 보고 아 너무 오버 엔지니어링 아..