728x90

전체 글 347

9월 백엔드 챌린지 정리 : 클린 코드 (3)

SOLID - 1 1. SRP : Single Responsibility Principle - 객체를 변경시키는 요인은 무조건 하나여야 한다 책임이란, 객체에 의해 정의되는 응집도(행동과 관련된 상태를 한 클래스에 모이는 정도) 있는 행위의 집합으로, 객체가 유지해야 하는 정보(상태)와 수행할 수 있는 행동(메서드)에 대해 추상적으로 서술한 문장이다. 책임과 기능은 구분이 가능하고 그 크기가 다르다. 책임은 객체가 수행할 수 있는 행동을 종합적이고 간략하게 서술하기 때문에 기능보다 추상적이고 개념적으로 더 크다 커피 주문 서비스를 설계하면서, 필요한 기능으로 1) 주문받기 -> 2) 커피 제조 -> 3) 준비된 커피 전달의 3가지 기능에 대한 책임을 "Cashier" 객체에 할당하도록 구현했다 publi..

9월 백엔드 챌린지 정리 : 클린 코드 (2)

소프트웨어 모듈이 가져야 할 3가지 기능1. 필요한 기능이 오류 없이 제대로 동작 2. 변경이 용이한 코드 3. 누가 읽어도 이해할 수 있는 코드, 예상 가능한 동작을 수행하는 코드절차지향과 객체지향1) 절차지향 : 메서드와 프로세스의 역할을 분리해 프로그래밍하는 방식 ~ 프로세스는 데이터의 변경에 따라 영향을 받기 때문에 프로세스도 변경을 해야한다. 따라서 이는 변경하기 쉬운 설계가 아니다 ~ 변경하기 쉬운 설계는 한 번에 하나의 클래스만 변경할 수 있는 설계를 말한다. 1. 하나의 클래스에서는 하나의 처리만 실행될 수 있도록 설계한다(적절하게 나눈다) 2. 나눠진 프로세스를 해당 프로세스와 연관이 있는 데이터가 있는 클래스로 옮긴다 ~ 데이터와 프로세스를 한 곳에 둔다. 데이터와 프로세스가 동일 모듈..

02. 25 TIL : 코드리뷰 with 깃헙액션 글 읽기, 쿼리 튜닝 실무

https://toss.tech/article/25431?ref=codenary GitHub Actions로 개선하는 코드 리뷰 문화 자동화를 통해 코드 리뷰 문화를 개선하고 편의를 높였던 경험을 공유해요. toss.tech 2. 쿼리 작성 실무 및 쿼리튜닝에 대한 경험 - 기존에 작성해본 쿼리 속도 : 500ms, 200개 row * 튜닝포인트 1) where 조건절 중 부서 검색시 부서의 이름으로 검색 -> 부서 아이디로 검색 : 인덱스가 걸려있는 부서 아이디 ~ 200ms 개선 2) 검색 조건에 인덱스 컬럼을 추가할 경우, 검색 결과는 같은데 쿼리 속도가 빨라진다 ~ 70ms 개선 3) 필요한 정보가 있는 다른 테이블을 left 조인으로 가져오고 있었으나, 필요한 컬럼만 가져오면 되기 때문에 서브쿼..

TIL, WIL/TIL📘 2024.02.25

01. 04 TIL : 커스텀 MVC 프레임워크 만들기 실습

- 어노테이션 기반 MVC 프레임워크 ~ DispatcherServlet ~ AnnotationHandlerMapping (+그림에서 HandlerMapping과 동일) ~ HandlerAdapter ~ ViewResolver 새로운 요청 URL을 만들때 1) 컨트롤러 생성 2) RequestMappingHandlerMapping에서 핸들러를 Mapping 하기 위해 해당 컨트롤러 객체 생성 및 mapping map에서 url을 통해 해당 컨트롤러를 찾는 findHandler() 메서드 호출 * 주의할 점 : 하나의 컨트롤러는 mapper에서 하나의 주소를 할당받아야 한다(url이 중복되면 안된다)

TIL, WIL/TIL📘 2024.01.25

01. 02 TIL : 프런트 컨트롤러(front controller) 패턴

출처 : 패스트캠퍼스 - 모든 요청을 단일 handler에서 처리하도록 하는 패턴 - 스프링 웹 MVC 프레임워크의 DispatcherServlet(프런트 컨트롤러 역할)이 프런트 컨트롤러 패턴으로 구현되어 있다 * Forward vs Redirect 1) Forward - 서블릿에서 클라이언트를 거치지 않고 바로 다른 서블릿(또는 JSP)에 요청하는 방식 - Forward 방식은 서버 내부에서 일어나는 요청이기 떄문에 HttpServletRequest, HttpServletResponse 객체가 새롭게 생성되지 않는다(공유된다) - RequsetDistpatcher dispatcher = request.getRequestDispatcher("포워드할 서블릿 또는 JSP"); - dispatcher.fo..

TIL, WIL/TIL📘 2024.01.02

12. 31 TIL : 리플렉션(Reflection API)

- 힙 영역에 로드되어 있는 클래스 타입의 객체를 통해 필드, 메소드, 생성자를 접근제어자와 상관없이 사용할 수 있도록 지원하는 API ~ 힙 영역의 클래스 타입 객체를 가져오는 세 가지 방법 : 1) class.class, 2) instance.getClass, 3) class.fullname + JVM의 클래스 로더는 클래스 파일 로딩이 끝나면 클래스 타입 객체를 생성해 메모리의 힙 영역에 저장한다 - 컴파일 시점이 아닌 런타임 시점에 동적으로 특정 클래스의 정보를 추출할 수 있는 프로그래밍 기법 - 주로 프레임워크 또는 라이브러리 개발 시 사용된다 * 리플렉션을 사용하는 프레임워크, 라이브러리 - 스프링(DI) - 테스트 프레임워크 ~ JUnit - JSON Serialization/Deserial..

TIL, WIL/TIL📘 2024.01.02

12. 27 TIL : JDBC 등

JDBC - 자바 애플리케이션에서 DB 프로그래밍을 할 수 있도록 하는 표준 인터페이스 - JDBC 구현체는 각 DB 밴더사에서 제공한다 ~ JDBC Driver DBCP - 미리 일정량의 DB 커넥션을 생성해 풀에 저장하고 Http 요청에 따라 필요 시 풀에서 커넥션을 가져다 사용 - 스프링 부트 2.0부터는 디폴트 커넥션 풀로 HikariCP 사용 커넥션 풀 사용 시 유의사항 - WAS 스레드가 커넥션의 사용 주체이므로 커넥션 개수는 WAS 스레드 수와 함께 고려해야 한다 ~ 커넥션 수가 크면 메모리 소모가 커지지만 동시 접속자 수가 많아도 대기 시간이 적어지기 떄문에 적정 커넥션 량을 생성해야 한다 DataSource - 커넥션을 획득하기 위한 표준 인터페이스

TIL, WIL/TIL📘 2023.12.27
728x90