# f-lab

276개의 포스트
post-thumbnail

F-Lab 3개월 중간 후기

F-lab 멘토링 준비 하며 기록한 것들.. F-Lab 계기&목적 제 경력은 총 2년 4개월로 자바 백엔드 개발자 입니다. F-Lab을 시작하게 된 계기를 3단계로 나눠봤습니다. [1] 성장 속도 당시 재직 중인 회사는 개발문화 없음, 사수 없음, 정부 과제 차출 등으로 성장 목표치를 100으로 봤을 때, 이 회사에서는 100을 달성하려면 5년이 걸리고, 성장 환경을 제공하는 회사에서는 1~2년이면 될 것 같다는 생각이 들었습니다. [2] 이직 실패 그래서 이직을 시도했으나 서류 지원 80개 중 단 5개만 통과하고 이마저도 1차 면접에서 탈락했습니다. [3] 학습 방법 그제야 내가 공부해 온 게 깡통이구나 깨닫고 부랴부랴 외부 스터디도 참여했으나 개발 공부 방법을 몰라

2023년 9월 12일
·
0개의 댓글
·

취준 후기 (feat : F-lab)

취준을 준비하면서 대학교 프로젝트에서 Spring을 사용하면서 자연스럽게 백엔드 개발자의 길을 시작하게 되었다. 졸업 후에 혼자 취준을 하면서 인프런강의를 100만 원어치를 결제해두고 닥치는 대로 공부를 했던 것 같다. 당시 인프런에서 들은 강의를 기반으로 빠르게 만들었던 포트폴리오용 프로젝트들의 관심사는 기능 구현이었다. 하지만 취업시장에서 이런 개발자들은 생각 보다 많고 회사에서 원하는 개발자가 아니었다는 것을 2개월 정도 취준을 하면서 금방 깨닫게 되었다. 그럼 회사가 원하는 개발자는 뭘까??????? 지극히 개인적인 의견이지만 제품에 대해서 고민을 하는 사람이 아닐까? 생각한다. 내가 만드는 제품이 어떤 제품인지 특성과 정책에 따라서 리소스의 양도 구현 방법도 달라진다. (물론 구현능력도 중요하다) 하지만 이런 것들을 충분히 고민하지 않고 만든 프로젝트는 코드의 퀄리티뿐만 아니라 전반적으로 불필요한 기술을 사용하여 리소스를 낭비하거나 최신

2023년 8월 8일
·
2개의 댓글
·

[F-Lab 모각코 챌린지 66일차] 자바 취업책 리뷰

오늘은 곧 나올 책에 대한 간단한 훑어보기를 진행했다. 실질적인 코드를 작성하고 기술에 대한 학습을 진행했다기보단, 초 간단한 CS 지식과 자바에 대한 부분.. 그러니까 책 전반부를 보았다. 200p 정도 본 듯 한데, 전체 책 분량의 1/3정도이다. 전반적으로 내용이 굉장히 좋았다! 아직 실습 부분은 진행해보지 않아서 모르지만(과제 따라치면서 또 오지게 삽질할수도^^;;) 아래 내용은 꼭 책에 나오지 않았더라도, "신입 자바 개발자 면접"을 주제로 검색하면 자주 나오는 내용이므로 블로그 토픽으로 쭉 작성해본다. 1. 자바 IDE와 소스코드 편집기의 차이는? IDE는 통합 개발 환경을 의미하며, 기본적인 소스코드 편집 기능 이외에 프로젝트 빌드, 실행, 디버깅, 의존성 관리 등 프로젝트 구현의 전반적인 과정을 도와주는 도구입니다. 소스코드 편집기는 조금 더 편한 소스코드 작성 및 편집을 위해 기본적으로 제공되는 기능(indent 등)을 제공합니다. IDE가 소스

2023년 8월 5일
·
0개의 댓글
·

[F-Lab 모각코 챌린지 65일차] WAS 시작시 DB에 값넣기

DB 값넣기 레시피에 존재할 태그의 목록이 있다. 최초엔 레시피의 카테고리를 나눠서, 사용자들이 카테고리별로 레시피를 나눌 수 있는 기능을 만들고 싶었는데 멘토님께서 레시피에 달린 태그 기능으로 만들면 기능의 개발이나 확장성 측면에서 더 좋을 것 같다고 조언해주셨다. 생각해보니 카테고리란 아예 존재하지 않을 수도 있고, 하나의 태그 타입에도 여러 개의 태그가 존재할 수도 있어서 태그가 레시피와 일대다 연관관계를 맺을 수 있으면 훨씬 좋을 것 같다!! 엔티티 클래스는 아래와 같이 작성될 예정이다. TagType은 "종류별", "상황별" 등 말 그대로 어떤 종류의 태그인지를 결정하고, TagName은 레시피 엔티티가 가진 실제 태그, 즉 "디저트"나 "찌개"(종류별일 경우) 혹은 "손님 접대용"이나 "초간단" 등이 존재한다. 전반적으로 "만개의 레시피" 사이트의 "분류" 기능과 유사하게 만들 계획이다. ![](https://velog.velcdn.com/

2023년 8월 5일
·
0개의 댓글
·
post-thumbnail

[F-Lab 모각코 챌린지 66일차] 모노레포 Monorepo

모노레포 Monorepo > 소프트웨어 개발에서 여러 프로젝트나 모듈을 하나의 대규모 리포지토리(repository)에서 관리하는 개발 방법을 말한다. 저장소 모델 소스 코드 구성을 위한 구조화 옵션의 대표적인 두가지 소스 형상 관리 시스템상에서 소스 리포지토리를 관리하는 방법 두가지 모노레포 멀티레포(매니레포) 멀티레포는 추후에 알아보겠다. 초기 프로젝트 구조 프로젝트 초기에는 모노리딕 시스템으로 서비스를 구현하게 된다. 프로젝트의 크기가 크지 않고, 개발자의 수도 적기 때문에 모든 것을 한곳에서 처리하는 것이 효율적. 이 경우 시스템 자체가 쪼개어지지 않고 하나이기 때문에 리포지토리 역시 하나로 관리하게 된다. 모노리딕 시스템 Monolithic System 소프트웨어를 단일한 거대한 블록으로 구성된 하나의 단일 애플리케이션으로 개발하는 방식을 의미. 전통적인 방식이고, 모든 기능과 컴포넌트를 하나의 코드베이스에 포함하여

2023년 8월 5일
·
0개의 댓글
·
post-thumbnail

[F-Lab 모각코 챌린지 65일차] JavaScript class 예제 + 퀴즈로 Vitest 테스트 코드 적용하기

우선, 공부 중에 맥북이 고장나게 되어 더 많은 내용을 포스팅하고 싶었으나 그러지 못하게 되어 아쉽다. [1] 카운터를 만들기 0 이상의 값으로 초기화 한 뒤 하나씩 숫자를 증가할 수 있는 카운터를 만들기 GPT가 내준 Class를 활용한 퀴즈 주어진 퀴즈의 정답을 카운트하는 클래스 QuizCounter를 만들어보세요. QuizCounter 클래스는 다음과 같은 기능을 갖추어야 합니다. QuizCounter 클래

2023년 8월 4일
·
0개의 댓글
·

[F-Lab 모각코 챌린지 64일차] JavaScript 클래스 Class

JavaScript 클래스 Class > 객체 지향 프로그래밍(OOP)에서 사용되는 템플릿 (청사진, 틀). 관련된 속성과 메서드를 그룹화하는 기능을 제공하는 문법적 구조. ES6(ES2015)이후 부터 JavaScript에서 클래스를 공식적으로 지원함. 기존의 프로토타입 기반 상속을 보다 명확하고 편리하게 구현할 수 있게 되었다. 생성자 함수 대신 많이 사용, Typescript도 클래스 기반. 클래스는 생성자(constructor)와 메서드(method)를 포함한다. 생성자 constructor 객체(인스턴스)를 생성할 때 호출되는 특별한 메서드다. 클래스 내부에 constructor 키워드를 사용하여 정의하고, 객체를 초기화하는 데에 사용된다. 생성자는 클래스가 new 키워드를 사용하여 인스턴스화될 때 자동으로 호출된다. 이때 인자를 전달하여 객체를 초기화하는 데에 사용된다. 생성자 내에서 this 키워드를 사용하여 클래스의 속성을 설정할 수 있다

2023년 8월 3일
·
0개의 댓글
·
post-thumbnail

[F-Lab 모각코 챌린지 64일차] JSON null 처리, Pagination + FetchJoin

JSON으로 나가는 DTO에 null값 항목 없애기 DTO를 최대한 줄이는 작업을 하고있다. 유저 Request를 제외하고는 어플리케이션을 돌아다니는 DTO는 하나의 엔티티당 2개 이내로 유지하려고 하고 있다. 그러나 user response 응답으로 내려줄 DTO가 문제였다. 유저의 id만 필요할 때가 있고, 유저의 이름과 id만 필요할 때가 있고, 팔로우 팔로워 수까지 전부 필요할 때가 있었다. 이 때마다 DTO를 새로 만들어주는건 심히 비효율적이다. 객체에서 응답으로 내려줄 필요가 없는 필드엔 null을 만들어서 응답으로 내려주려고 하는데, 응답 JSON 본문에 null이 있는건..!!!! 용납 안 돼!! 당연히 갓 개발자님들은 해결법을 이미 만들어놓으셨다. 이제 DTO에 원하는 필드만을 설정해서 사용자 응답으로 내려줄 수 있게 되었다. 위의 예시에서 사용자 이메일만 응답으로 내려주고 싶으면 userId와 nickname을 nu

2023년 8월 3일
·
0개의 댓글
·
post-thumbnail

[F-Lab 모각코 챌린지 63일차] @BeforeAll, @AfterAll Non-static method로 구현하기

문제 상황 : Test Method끼리 공유하는 Bean 필요 JUnit5를 이용해 Spring Boot 프로젝트의 테스트코드를 작성하는 도중이었다. 하나의 @SpringBootTest 클래스 안에 존재하는 여러 개의 @Test method가 공유하는 Repository를 생성하고 싶었다. 코드로 말하면 아래와 같은 상황이다. @BeforeAll이 붙은 method가 테스트 method들을 실행하기 전 10명의 유저를 userRepository에 저장한다. 그 후 2개의 test method가 userRepository에 저장된 것을 테스트하는 것이다. 위 Test Class를 돌리면 에러가 뜬다. 에러 이유 : Repository는 static이 될 수 없다 로그를 살펴보자. ![](https://velog.velcdn.com/images/stberry8/post/eb8cbec2-7939-4270-9fbf-a2087deb75f2

2023년 8월 2일
·
0개의 댓글
·
post-thumbnail

[F-Lab 모각코 챌린지 63일차] JavaScript 객체

Object 객체 Object literal 객체 리터럴 > 객체 리터럴은 JavaScript에서 객체를 만들기 위한 표기법이다. 객체는 이름-값 쌍의 집합이며, 이름은 속성(Property)을 나타내고 값은 해당 속성의 데이터를 나타낸다. 객체 리터럴은 중괄호 {}안에 속성들을 정의하여 객체를 생성한다. object literal { key: value } 구성. key : 문자, 숫자, 문자열, 심볼 Symbol 등이 해당 value : 원시값, 객체 (함수) 등이 해당 객체의 Property에 접근하는 방법 . 점 과 [] 대괄호 정적 접근 Static access과 동적 접근 Dynamic access 프로

2023년 8월 2일
·
2개의 댓글
·

[F-Lab 모각코 챌린지 62일차] ResponseBody를 위한 DTO Composition

# DTO Artist "특정 유저가 작성한 코멘트", 혹은 "특정 레시피에 달린 코멘트"라는 기능을 만들고 싶었다. 생각해보면 구현 자체는 어렵지 않다. CommentRepository에서 User author 필드로 Comment를 검색하는 findByAuthor(User author) 메소드를 구현한다. CommentService에서 리포지토리의 해당 메소드를 호출하여 구성한 뒤 컨트롤러로 넘긴다. 컨트롤러에서 받은 엔티티를 DTO 인스턴스로 변환한 뒤 ResponseBody로 응답한다. @RestController를 쓴다는 가정하에, JacksonHttpConverter가 동작하여 우리의 class를 리플렉션을 이용해서 응답 JSON body로 내려줄 것이다. 이제 생각해보자. 특정 유저 혹은 특정 레시피를 기준으로 검색을 했다면 아마 코멘트 리스트가 반환되었을 것이다. 그러면 코멘트 리스트가 구성된 응답 body는

2023년 8월 1일
·
0개의 댓글
·
post-thumbnail

[F-Lab 모각코 챌린지 62일차] WebRTC

WebRTC > WebRTC(Web Real-Time Communication)는 웹 브라우저 간에 플러그인의 도움 없이 서로 통신할 수 있도록 설계된 API이다. W3C에서 제시된 초안이며, 음성 통화, 영상 통화, P2P 파일 공유 등으로 활용될 수 있다. 역사 WebRTC 등장 이전에는 고가의 라이선스 구매 비용을 들여서 통화 기능, 화상회의 기능 등을 개발해야 했다. 하지만 2010년, IT 기술 중에서도 유독 라이선스 사용에 많은 비용이 드는 기술이었던 VoIP(Voice over Internet Protocol) 시장에 기존에는 상상하기 어려웠던 뉴스가 등장했다. 구글이 WebRTC의 근간이 되는 여러 독점 기술 기업들(On2, GIPS)을 인수해서 WebRTC 기술을 오픈소스로 풀어버렸다. 이 기술들은 그전까지는 그야말로 세계 탑 수준의 미디어 엔진 및 코덱이었는데 이것을 오픈 한 뒤, 급기야 크롬 브라우저에 탑재시키고 표준화 단체까지

2023년 8월 1일
·
0개의 댓글
·
post-thumbnail

[F-Lab 모각코 챌린지 61일차] 초간단 AOP

AOP가 뭐죠. AOP(Aspect Oriented Programming)이란, 아주 널리 쓰이는 정의를 인용하자면 로깅, 트랜잭션 등 어플리케이션의 메인 로직과는 크게 상관 없는 부가적인 기능, 즉 "횡단 관심사"를 분리하기 위해 고안해낸 프로그래밍 방식이다. 그림을 보자. 위에서 아래로 흐르는 화살표는 프로그램의 메인 로직이다. 무언가를 계산하거나, 예시는 송금으로 들었지만 무언가 외부 IP를 사용하는 일이라든가, DB에 접근하는 프로그램의 주요 로직이다. 이것들을 "종단 관심사"라고 부른다. 종단 관심사는 개발자가 프로그램을 작성하는 목적이며, 프로그램이 존재하는 이유이다. 종단 관심사를 수행하는 기능을 구현하기 위해 우리가 개발을 하는 것이다. 그러나 위에서 아래로 흐르는 화살표를 가

2023년 7월 31일
·
0개의 댓글
·
post-thumbnail

[F-Lab 모각코 챌린지 61일차] The Testing Pyramid

테스트 코드를 공부 중인데 The Testing Pyramid를 알게되었다. 어떤 것인지 알아보자! (일러스트로 내가 만들어본 Testing Pyramid) The Testing Pyramid > 소프트웨어 개발에서 다양한 종류의 테스트를 조합하여 높은 품질의 소프트웨어를 구축하는 방법을 설명하는 모델이다. 마틴 파울러(Martin Fowler)와 노트북 홀더(Nat Pryce)가 제시한 개념으로 유명하다. 개발자와 QA가 모두 고품질 소프트웨어를 구축할 수 있도록 하는 프레임워크 개발자가 수행한 업데이트가 코드에 영향을 미치는지 확인하는 데 필요한 시간을 최소화 테스트 자동화 피라미드라고도 함. 개발 및

2023년 7월 31일
·
4개의 댓글
·
post-thumbnail

[F-Lab 모각코 챌린지 60일차] 로그 관리, Exception 정보

와!! 벌써 애프랩 60일차!! 뭐했죠? 1. 로그 관리 프로그램 동작 중 던져진 Exception을 관리하기 위해 아래와 같은 ExceptionHandler를 만들었다. 뭐가 문제인지 보이면 당신은 고수! UserExceptionHandler는 총 두 개의 예외를 관리하고 있다. 특정 key(Id 혹은 Email)로 유저를 찾았을 때, 해당 유저가 존재하지 않을 때 던지는 UserNotFoundException, 그리고 권한이 없는 유저가 요청을 날렸을 경우 던져지는 InvalidUserRoleException이다. 여기까진 ok이다. 일반적으로 예외가 던져지면 해당 예외의 정보를 로그로 찍어 남긴다. 트러블 슈팅을 위함인데, 따라서 예외를 던질 땐 해당 예외를 처리할 수 있도록 정보를 잘 남기는 것이 필요하다. (이와 관련해선 2번에 추가) > 우리가 서비스를 운영하다보면 로그를 통해 개발자가 알람을 받아보도록 구성해야할 수도

2023년 7월 30일
·
1개의 댓글
·
post-thumbnail

[F-Lab 모각코 챌린지 59일차] querydsl

1. QueryDSL? # Spring Data JPA의 한계 자바 어플리케이션에서 DB에 접근할 수 있게 해주는 JDBC. JDBC를 사용해 JPA를 구현한 ORM 프레임워크인 Hibernate. 그것을 한 층 더 편리하게 쓰게 해주는 Spring Data JPA. 하나하나 SQL문을 작성할 필요 없이 일정한 규악에 따른 derivced query만 작성하면 알아서 원하는 DB 접근 쿼리문을 작성해주는데다가, object mapping까지 시켜주는 유용한 라이브러리. .. 이지만 역시 한계는 존재한다. 1) 끝도 없이 길어지는 Derived Query 주인 - 애완동물 연관 관계에서, 특정 주인의 애완동물 중 특정 나이 이상의 애완동물을 최신 순으로 찾는 derived query이다. 동작이야 잘 하겠지만, 쿼리문이 너무 길고 가독성이 엉망이다. 2) 작성하기도, 읽기도 힘든 JPQL 위의 코드를 JPQL을 이용해서 작성했다.

2023년 7월 29일
·
0개의 댓글
·
post-thumbnail

[F-Lab 모각코 챌린지 59일차] Jest에서 Vitest로

정말 정보가 없었다. 다행히 medium 사이트에서 좋은 자료가 있어서 구글링을 엄청나게 병행하여 잘 진행했다. jest에서 vitest로 옮길 때 참고할 수 있는 자료가 되었음한다. node_modules 충돌 때문에 node랑 npm 전역 초기화 후 재설치 진행하고, pnpm 설치와 vite설치, vitest 설치까지.. 너무 힘든 여정이었다... ChatGPT도 모르는 최신 기술 Vitest 세팅을 해보자. Vitest > 소스 파일 변환의 복잡성을 처리할 필요가 없고 테스트 중에 최상의 DX를 제공하는 데에만 집중할 수 있는 간단한 실행기 Why Vitest? 복잡한 변환이란? Jest 사용시 React를 지

2023년 7월 29일
·
0개의 댓글
·
post-thumbnail

[F-Lab 모각코 챌린지 58일차] BaseEntity, Exception

# createdAt, updatedAt 필드를 추가하자 레시피 업로드 기능을 만들고 싶었다. 보통 커뮤니티에서 생각하는 "게시글"과 매우 비슷한 기능이다. 기본적으로 조회수와 북마크 기능을 가지고 있다. 추가로, 해당 게시글을 작성하거나 수정하여 DB에 반영된 일시를 체크하고 싶었다. 더 프로그래밍적으로 말하면 createdAt, updatedAt 필드를 엔티티 객체이 추가하고 db table에 컬럼으로 추가하고 싶었다. 물론, JAVA 진영에서 제공하는 현재 JVM의 시간을 캡쳐해서 엔티티에 지정해줄 수도 있지만, 그걸 직접 하는건 ㅋㅋ... 횡단 로직에 많은 시간을 쏟게되는 꼴이기도 하고, JPA 측에서 제공하는 관련 기능이 있는ㄷ 그러기 위해서 가장 먼저 필요한건, DB의 시간을 감시하는 "Auditor"을 추가하는 것이다. Component 위에 @EnableJpaAuditing 어노테이션을 추가하는 것이 일반적이다. 아예 `@SpringBootAppli

2023년 7월 28일
·
0개의 댓글
·
post-thumbnail

[F-Lab 모각코 챌린지 58일차] JavaScript Engine

JavaScript Engine > JavaScript 코드를 실행하는 프로그램 또는 인터프리터 웹 브라우저, 서버 사이드 환경, 모바일 앱 등에서 자바스크립트 코드를 실행하여 동적인 웹 페이지나 애플리케이션을 구현하는 데 사용된다. 자바스크립트 엔진의 대표적인 예는 Google V8 엔진이다. V8은 Chrome과 Node.js에서 사용한다. ECMAScript (ES6) > ECMAScript(이크마스크립트)는 자바스크립트(JavaScript)의 표준 규격을 정의하는 스크립트 언어 표준. js엔진이 하나가 아니라 여러 개이고 브라우저 별로 다르기 때문에 표준이 없다면 일관되지 못해 큰 문제가 될 수 있다. javascript를 표준화하여 여러 엔진과 브라우저에서 일

2023년 7월 28일
·
0개의 댓글
·

[F-Lab 모각코 챌린지 57일차] 다대다 연관관계 테이블 구성하기

# 초간단 JPA 연관관계 JPA에는 일대다 연관관계를 구성하기 위한 @ManyToOne, @OneToMany 어노테이션이 있다. 필드 값에 해당 어노테이션을 붙이고 타입을 collection으로 하면, ORM 측에서 collection(여기서 List라고 하겠다.)의 원소에 DB의 entity값을 매핑해준다. 예시라 하기에도 민망한 기본 코드지만.. 일대다 관계인 Parent : Child는 아래와 같이 구성할 수 있다. @JoinColumn은 many측인 Child에서 fk를 보관할 필드와 column이름을 지정할 수 있도록 해주는 어노테이션이다. 이대로 hibernate가 동작하게 하면 child 테이블의 "parent_id" 컬럼에 parent의 pk가 저장된다. mappedBy는 연관관계의 주인이 아닌 엔티티, 그러니까 fk를 가지고 있지 않은 Parent측에서 연관관계의 주인 엔티티의 어느 필드에 연관을 맺고있는지 명시하는 기능을

2023년 7월 27일
·
0개의 댓글
·