728x90
반응형

전체 글 131

[Management] 날짜 별 로그 생성

로그 관리 날짜별로 로그를 관리하고, 에러 로그도 따로 관리하기 위해 일정 날짜가 지나면 자동으로 로그를 모아주는 기능과 에러 로그를 모아서 관리하는 기능을 추가하였습니다. 1. /src/main/resources application.properties #로그레벨설정 logging.level.root=info logging.level.com.test.box=info logging.level.com.test.box.controller=debug logging.level.web:info #logging config logging.config=classpath:logging-spring.xml //아래 생성하는 xml 파일 이름 2. /src/main/resources logging-spring.xml 파일..

Project/Management 2022.10.24

[Algorithm] Greedy 알고리즘 _ 강의실 배정

import java.io.*; import java.util.*; public class Main { public static class Lecture implements Comparable { int start; int end; public Lecture(int start, int end) { this.start = start; this.end = end; } public int getStart() { return start; } public int getEnd() { return end; } // 수업 시작 시간을 기준으로 오름차순 정렬 || 수업 시작 시간이 같다면 종료 시간 기준 @Override public int compareTo(Lecture o) { if(o.getStart()==getS..

Algorithm 2022.10.21

[Clean Code] 8장 경계

깨끗한 코드를 작성하기 위한 여덟번째 기록 외부 코드 사용하기 java.util.Map을 살펴보면 Map은 다양한 인터페이스로 수많은 기능을 제공합니다. Map이 제공하는 기능성과 유연성은 확실히 유용하지만 그만큼 위험도 큽니다. 프로그램에서 Map을 만들어 여기저기 넘긴다고 했을 때 Map 이 제공하는 clear() 메서드를 통해 누구나 Map의 내용을 지울 수 있게 되기 때문입니다. Map과 같은 경계 인터페이스를 이용할 때는 클래스나 클래스 계열 밖으로 노출되지 않도록 주의해야 합니다. Map 인스턴스를 공개 API의 인수로 넘기거나 반환값으로 사용하지 않습니다. 아직 존재하지 않는 코드를 사용하기 팀 작업에서 다른 팀이 API를 설계하지 않았을 때, 구현을 미루고 자체적으로 필요한 인터페이스를 정..

[Clean Code] 7장 오류 처리

깨끗한 코드를 작성하기 위한 일곱번째 기록 오류 처리는 중요합니다. 하지만 오류 처리 코드로 인해 프로그램 논리를 이해하기 어려워진다면 깨끗한 코드라고 부르기 어렵습니다. 그렇다면 우아하고 고상하게 오류를 처리하는 기법과 고려 사항 몇 가지를 알아보겠습니다. 오류 코드보다 예외를 사용하라 함수를 호출한 즉시 오류를 확인해야 하기 때문에 오류가 발생했을 때 예외를 던지는 편이 낫습니다. 그렇게 하게 되면 논리와, 오류 처리 코드가 섞이지 않아 깨끗한 코드가 됩니다. Try-Catch-Finally 문부터 작성하라 Try 블록에 들어가는 코드를 실행하면 어느 시점에서든 실행이 중단된 후 Catch 블록으로 넘어갈 수 있습니다. 어떤 면에서 Try 블록은 트랜잭션과 비슷합니다. Catch 블록은 Try 블록에..

[Management] DB Error : ORDER BY clause is not in SELECT list

전체 에러 내용 2022-10-13 07:29:13.707 WARN 20835 --- [nio-9080-exec-8] o.h.engine.jdbc.spi.SqlExceptionHelper : SQL Error: 3065, SQLState: HY000 2022-10-13 07:29:13.707 ERROR 20835 --- [nio-9080-exec-8] o.h.engine.jdbc.spi.SqlExceptionHelper : Expression #1 of ORDER BY clause is not in SELECT list, references column 'mesdb.warehousin1_.created_date' which is not in SELECT list; this is incompatible w..

Project/Management 2022.10.14

[Management] vue.js 빌드 파일 spring project 병합

문제 인식 원래 생각했던 방식은 /src/resource/static 폴더에 빌드를 통해 만들어진 /js, /css index.html 파일을 넣고 http://localhost:8080/ 으로 접속하면 되겠다고 생각했습니다. 하지만 다른 설정이 필요했고, Spring Security도 적용되어 있어서 설정해줘야할 내용이 많았습니다. 설정 내용 config 파일이 모여있는 디렉터리에 WebMvcConfig 클래스를 생성하여 설정을 하였습니다. import org.springframework.context.annotation.Configuration; import org.springframework.core.io.ClassPathResource; import org.springframework.core.i..

Project/Management 2022.10.14

[Relational Databases] DB Index 설정

인덱스를 사용하는 이유 일반적으로 SQL 서버에 데이터를 저장할 때 내부적으로는 아무런 순서 없이 저장합니다. 이때, 데이터 저장 영역은 Heap이라고 합니다. Heap 에서는 인덱스가 없는 테이블의 데이터를 찾을 때 전체 데이터 페이지의 처음 레코드부터 끝 페이지 마지막 레코드 까지 모두 조회하게 됩니다. 이러한 검색 방식을 풀 스캔(Full Scan) 또는 테이블 스캔(Table Scan) 이라고 합니다. 다음과 같은 검색의 속도를 향상 하기 위해 인덱스를 사용하게 됩니다. 사용 예시 다음과 같은 테이블이 있다고 가정하겠습니다. Create Table User ( uuid Binary(16) Primary Key, name Varchar(20) Not Null, age Integer Not Null,..

[Clean Code] 6장 객체와 자료 구조

깨끗한 코드를 작성하기 위한 여섯번째 기록 자료 추상화 구현을 감추기 위해서 추상화가 필요합니다. 그저 조회 함수와 설정함수로 변수를 다룬다고 클래스가 되지 않습니다. 추상 인터페이스를 제공해 사용자가 구현을 모른 채 자료의 핵심을 조작할 수 있어야 진정한 의미의 클래스이다. 개발자는 객체가 포함하는 자료를 표현할 가장 좋은 방법을 심각하게 고민해야 한다. 아무 생각 없이 조회/설정 함수를 추가하는 방법이 가장 나쁘다. 자료/객체 비대칭 객체는 추상화 뒤로 자료를 숨긴 채 자료를 다루는 함수만 공개한다. 자료 구조는 자료를 그대로 공개하며 별다른 함수는 제공하지 않는다. 객체 지향 코드에서 어려운 변경은 절차적인 코드에서 쉬우며, 절차적인 코드에서 어려운 변경은 객체 지향 코드에서 쉽다. 분별 있는 프로..

[Clean Code] 5장 형식 맞추기

깨끗한 코드를 작성하기 위한 다섯번째 기록 형식을 맞추는 목적 코드 형식은 중요하다! 너무 중요해서 무시하기 어렵다. 코드형식은 의사소통의 일환이다. 오늘 구현한 기능이 다음 버전에서 바뀔 확률은 아주 높다. 하지만 오늘 구현한 코드의 가독성은 앞으로 바뀔 코드의 품질에 지대한 영향을 미친다. 가독성 수준은 유지보수 용이성과 확장성에 계속 영향을 미친다. 적절한 행 길이를 유지하라 다양한 프로젝트를 본 결과, 500줄이 넘지 않고, 대부분 200줄 정도인 파일로도 커다란 시스템을 구축할 수 있다는 사실! 반드시 지킬 엄격한 규칙은 아니지만 바람직한 규칙으로 삼으면 좋다. 일반적으로 큰 파일보다 작은 파일이 이해하기 쉽다. 신문 기사처럼 작성하라 소스 코드도 신문 기사처럼 이름은 간단하면서도 설명이 가능하..

[Clean Code] 4장 주석

깨끗한 코드를 작성하기 위한 네번째 기록 주석은 나쁜 코드를 보완하지 못한다 우리는 코드로 의도를 표현하지 못해, 실패를 만회하기 위해 주석을 사용한다. 여기서 내가 실패라는 단어를 썼다는 사실에 주목한다. 주석은 언제나 실패를 의미한다. 때때로 주석 없이는 자신을 표현할 방법을 찾지 못해 할 수 없이 주석을 사용한다. 주석이 필요한 상황에 처하면 곰곰이 생각하기 바란다. 상황을 역전해 코드로 의도를 표현할 방법은 없을까? 코드로 의도를 표현하라 // 직원에게 복지 혜택을 받을 자격이 있는지 검사한다. if((employy.flags & HOURLY_FLAG) && (employy.age > 65)) if(employee.isEligibleForFullBenefits()) 두 가지 코드를 보면 주석을 사..

728x90
반응형