본문 바로가기

전체 글65

스프링 부트 초기세팅(Spring initializer, gradle kotlin, MariaDB, IntelliJ, Java17) 시작 토이 프로젝트를 만들어 보려고 합니다. 회사에서 주구장창 쓰던 1.8에서 벗어나 최신버전인 17을 사용하려고 합니다. 그 뿐만 아니라 최대한 안쓰던 기술 스택을 사용하여 구성합니다. 큰 틀인 스프링 부트, 마리아 db에서는 벗어나지 않으나 jsp 대신 리액트를 사용하려고 합니다. 이번 포스팅은 해당 프로젝트 중 스프링 부트를 구성하는데 필요한 세팅을 차례차례 알아보려고 합니다. 구성IntelliJSpring Boot 3.2.5MariaDB(tool : Sequel Ace)JPA, HibernateJava 17GitSourceTree준비tool을 먼저 설치합니다. 기본 환경은 맥입니다. 저는 홈브류(Homebrew)를 이용했습니다. CLI명령어로 프로그램을 간편하게 설치할 수 있어 애용합니다. 홈브류.. 2024. 6. 14.
클린코드(clean code)를 읽고 요점 정리 및 코딩의 방향성 잡기 시작 클린 코드. 말그대로 깔끔한 코드를 작성하기 위해 개발자가 알아야 할 사항들을 집필한 교과서 같은 책이었습니다. 다만 우리나라 저자가 아닌 점, 최초 발행일이 2008년인 점을 감안하여 맹목적으로 따르는 것이 아닌 옳은 방향을 잡는 나침반과 같은 용도로 삼아야겠다 생각했습니다. 회고  클린 코드의 옮긴이는 서문에서부터 시간에 쫓겨 나쁜 코드를 작성한 자신을 후회한다고 반성하였습니다. 1회독을 한 저도 그와 같이 반성을 하게 되었습니다. 이 책은 그런 책입니다. 개발에 대한 꿈을 가지고 공부한 뒤 입사를 하였지만 시간이 흐르며 일정에 치이고 현실과 타협한다는 자기합리화로 편한 길을 찾느라 망가진 코드에 대해 생각하게 만듭니다. 비슷해 보이는 기능을 찾아 제대로 검토하지 않고 복사 붙혀넣기를 하고 그저.. 2024. 6. 12.
프로그래머스 레벨 1 - 코딩테스트 고득점kit 해쉬 : 폰켓몬[자바] 문제난이도 : 레벨1문제 :폰켓몬을 가져갈 수 있는 최대 개수는 총 폰켓몬 / 2같은 종류의 폰켓몬은 가져갈 수 없음제한사항 :nums 배열에 폰켓몬의 종류가 1차원 배열로 담겨 있음.1 폰켓몬의 종류는 자연수 1~200,000답애초에 코딩테스트 공부를 거의 안하기도 했고 오랜만에 다시 공부하는 코딩테스트라 어떻게 풀어야 하는지 전혀 감이 잡히지 않았습니다.배열을 순회하면서 원소들끼리 비교해서 다르다면 count++ 하는 방법을 생각했으나 포기했습니다.(다른 사람의 풀이를 보니 sort를 통해 정렬한 후에 제가 생각한 방법대로 한 것을 보긴 했습니다. sort함수를 알고는 있었지만 거기까지 연결짓지 못했습니다.)결국 풀이를 통해 HashSet와 중복 제거라는 키워드를 찾았고 그것을 토대로 문제를 풀 수 .. 2024. 6. 12.
프로그래머스 레벨 2 - 코딩테스트 고득점kit 해쉬 : 전화번호 목록[자바] 문제난이도 : 레벨2문제 :전화번호부에 적힌 전화번호 중 한 번호가 다른 번호의 접두어인 경우가 있는지 확인하고 결과에 따라 true, false를 리턴하는 문제.전화번호는 String[] phoneBook형태로 주어지게 된다.제한사항 :1 각 전화번호의 길이는 1이상 20이하중복되는 전화번호는 없음답제가 처음 생각한 것은 배열을 정렬한 뒤 가장 작은 수를 가진 배열의 원소를 기준으로 다른 원소들과 비교하여 접두어에 속하는지 판단하는 것이었습니다. import java.util.*;class Solution { public boolean solution(String[] phone_book) { boolean answer = true; ArrayList phone_save_l.. 2024. 6. 12.
스프링 부트 DI - 필드 주입과 생성자 주입의 초기화 시점 DI(의존성 주입)의존성 주입이란 객체가 스프링 빈에 등록된 다른 객체를 필요로 할 경우 해당하는 객체를 가져오는(주입해주는) 행위이다.전통적인 자바에서는 스스로 객체를 생성하거나 찾지만 스프링 부트에서는 이 과정을 외부에서 처리한다. (SOLID원칙을 지켜 객체 간 결합도를 낮추고 코드의 유연성을 증가함.)의존성 주입의 유형생성자 주입수정자(setter) 주입필드 주입일반 메소드 주입포스팅을 하게 된 배경과거 실무에서 저는 이 필드 주입만을 사용하여 DI를 진행했습니다. 그러나 김영한 선생님의 강의를 들으며 이 필드 주입은 그다지 권장하지 않는 방법이다, 라는 것을 배웠습니다.why?-> 필드 주입을 할 경우 객체가 생성되고 난 뒤에 의존성 주입이 일어나기 때문에 객체가 가변적이게 됩니다.-> 이는 다.. 2024. 6. 12.
리액트 커스텀 훅 사용 시 다중상태관리와 클로저의 존재 이유 리액트의 컴포넌트리액트의 컴포넌트는 함수와 클래스로 나뉜다.요새는 함수 컴포넌트를 사용하는 추세라고 한다. 왜냐하면 클래스 컴포넌트는 변경에 취약하여 인스턴스로 만든 속성에 접근이 가능한 반면 함수는 내부 상태를 클로저로 관리하기 때문에 외부에서 접근하지 못한다.또한 클래스 컴포넌트는 리액트 컴포넌트를 반드시 상속 받아야하고 생성자 super 호출 및 render메소드를 반드시 구현해야함.함수 컴포넌트는 리액트 엘리먼트를 반환해야함.클래스 컴포넌트는 상태를 관리하기 위해 this 객체를 사용한다.반면 함수 컴포넌트는 상태관리에 한계가 있기 때문에 등장한 것이 훅(hook)이다.훅(hook)리액트의 useState를 사용하여 함수 컴포넌트의 state값을 변경한다. (클래스의 인스턴스의 경우 this.st.. 2024. 6. 12.