본문 바로가기

728x90

전체 글

(300)
04. 24. TIL : Decode(), With(), 데이터베이스 인덱스 1. Decode()- decode 함수는 CASE-WHEN 구문의 역할과 같이 if else 구문으로 활용할 수 있는 쿼리문이다(표준 SQL은 CASE)- 마지막 else는 비어있어도 상관없다. Null로 표시됨- NVL2와 같이 Null 체크 가능- Decode 함수 내부에 또 다른 Decode 함수 사용가능2. With()참고 : https://heodolf.tistory.com/71: 처음 보는 구문으로, 학습이 더 필요하다- 이름을 가진 SubQuery, 가독성을 높힐 수 있고, 재사용할 수 있다- 계층형 쿼리를 구현할 수 있다 기본 구조ex)WITH PR_ORDER AS (         SELECT         ROW_NUMBER() OVER(ORDER BY A.REG_DT) as PR_N..
4월 마지막 주 : 사이드 프로젝트 개발 스택 GitHub Organization도커를 사용해서 프론트에서 테스트 할 수 있도록 : 성재배포를 어떻게 할지 (인프라)AWS : 프리티어가 없어 비용 지불해야함GCP : 러닝커브가 있다백엔드 개발JAVA, KOTLINDBMYSQL vs PostgreSQL 유현지도 API 규격에 맞는 DB 구성RDS, EC2, superbase식?사용량이 적다면 굳이 RDS를 택해?JWT(인증) vs REDIS : 성재Session/Cookie - RedisJWT - 복호화 JWT Java Library 지원CI/CDCI: Jenkins, GitHub, CodebuildCD: Manual(script), Codedeploy, JenkinsSwagger : 테스트 코드 작성 시 실제 클래스를 활용한 테스트 코드 작성을 위해..
9월 백엔드 챌린지 정리 : 클린 코드 (4) ISP : Interface Segregation Principle 인터페이스도 작게 쪼개자 객체는 자신이 사용하는 기능(메서드)에만 의존해야 한다는 원칙에 따라 분리하는 것과 마찬가지로, 인터페이스는 그 인터페이스를 사용하는 클라이언트(객체)를 기준으로 분리해야 한다. 클래스(인터페이스)가 가진 책임의 크기를 줄일 수 있고, 관심사의 분리를 해낼 수 있으며 확장성을 가져갈 수 있기 때문에 필요하다 A 인터페이스를 상속하는 B와 C 클래스가 있다. B는 A의 모든 메서드를 사용하기 때문에 상속에 문제가 없지만, C의 경우 A의 모든 메서드를 사용할 필요가 없을 때, C는 사용하지도 않는 메서드와 의존성을 맺는 것이다. 이러한 경우, ISP를 위반하면서, A의 a-1 메서드(C가 사용하지 않는 메서드)에 ..
9월 백엔드 챌린지 정리 : 클린 코드 (3) SOLID - 1 1. SRP : Single Responsibility Principle - 객체를 변경시키는 요인은 무조건 하나여야 한다 책임이란, 객체에 의해 정의되는 응집도(행동과 관련된 상태를 한 클래스에 모이는 정도) 있는 행위의 집합으로, 객체가 유지해야 하는 정보(상태)와 수행할 수 있는 행동(메서드)에 대해 추상적으로 서술한 문장이다. 책임과 기능은 구분이 가능하고 그 크기가 다르다. 책임은 객체가 수행할 수 있는 행동을 종합적이고 간략하게 서술하기 때문에 기능보다 추상적이고 개념적으로 더 크다 커피 주문 서비스를 설계하면서, 필요한 기능으로 1) 주문받기 -> 2) 커피 제조 -> 3) 준비된 커피 전달의 3가지 기능에 대한 책임을 "Cashier" 객체에 할당하도록 구현했다 publi..
03. 07 TIL HTML : FORM을 중첩해서 사용하면 안됨 및 대안 탐색 중첩된 form은 값을 읽을 수 없다 대안 : XMLHttpRequest로 요청을 보내는데 동기로 요청을 보내면 기존의 페이지가 유지된 상태에서 요청을 보낼 수가 있다. 일반적인 방식은 아니겠지만, 현재 적용할 수 있는 최선으로 판단된다
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 조인으로 가져오고 있었으나, 필요한 컬럼만 가져오면 되기 때문에 서브쿼..
01. 30 TIL : @ConstructorBinding https://www.zodaland.com/tip/64 ZODALAND 새 프로젝트를 진행하며 설정 값 적용을 위해 Properties 클래스를 작성 중 이전 프로젝트와 마찬가지로 @ConstructorBinding 어노테이션을 적용 했는데 오류가 발생했다. 똑같은 방식으로 적용했는데도 www.zodaland.com 스프링 부트 3 이후부터는 @ConstrutorBinding 어노테이션을 사용할 필요가 없다.

728x90