개인 공부 (23.07~ 69

톰캣 콘솔 한글 깨짐 해결

인텔리제이 콘솔에서 톰캣 한글 로그가 깨질 때 해결 방법 증상 체크 톰캣 서버를 띄웠는데, 콘솔에서 한글이 잘 찍히지 않는다. 초기화 과정에서 나오는 메세지가 깨져서 나온다. 기본 Intellij 콘솔 인코딩 깨짐 해결 아래의 화면처럼 깔끔한 초기화 로그 jake-seo-dev.tistory.com 🐱 톰캣 로그 한글 깨짐 해결 4가지 방법 톰캣 로그 한글 깨짐 해결 방법 톰캣 로그를 실시간으로 보면 한글이 외계 문자로 깨져서 나와 눈살을 찌푸리는 경우가 종종 발생한다. 이 경우는 톰캣의 인코딩을 변경해주면 해결할 수 있다. ( inpa.tistory.com [톰캣 로그 한글 깨짐] 이라는 키워드로 구글링을 해서 위 링크들을 포함한 여러 곳에서 알려주신대로 설정들을 다 바꿔봤는데 해결되지 않았다. 그리고..

스프링 없이 mysql 연동

SQLException: Communications link failure The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. 왜 이런 오류를 맞닥드린 것인가? 처음에 Docker를 통한 mysql을 쓴다고, 기존에 내 컴퓨터에서 쓰던 mysql 3306포트를 과감히 kill~ 했다. 그런 후에 Docker 안쓰겠다고 Docker 지우고는 다시 내 컴퓨터에 있는 mysql 쓰겠다고 하니..안되었던 것이다. cmd를 통해 netstat -a -o 명령을 입력하니 3306 포트는 어디에도 없었다. 해결책 먼저 서비스에 들어갔더니 m..

도메인 모델과 테이블 설계

관계형에서는 *부분에 외래키가 존재한다. 외래키가 존재하는 곳이 연관관계의 주인이 된다. 연관관계의 주인은 단순히 외래키를 누가 관리하냐의 문제이다. 비즈니스상 우위에 있다고 주인으로 정하면 안된다. 예를들어, 자동차와 바퀴가 있으면 일대다 관계에서 항상 다쪽에 외래키가 있으므로 외래키가 있는 바퀴를 연관관계의 주인으로 정하면 된다. 물론 자동차를 연관관계의 주인으로 정하는 것이 불가능한 것은 아니지만 자동차를 연관관계의 주인으로 정하면 자동차가 관리하지 않는 바퀴 테이블의 외래키 값이 업데이트되므로 관리와 유지보수가 어렵고 추가적으로 별도의 업데이트 쿼리가 발생하는 성능 문제도 있다. 객체 기준으로는 변경 포인트가 두 군데가 되는데 테이블 기준으로는 외래키 하나만 변경하면 된다. 둘 중에 하나를 주인이..

테스트 코드 작성 - isSameAs, isEqualTo, isInstanceOf

isSameAs : 객체의 참조 값(주소)를 비교 isEqualTo : 특정 값을 비교하거나 String 값 비교 isInstanceOf : 해당 타입의 인스턴스인지를 비교하는 메서드. instanceof 연산자는 객체가 특정 클래스나 인터페이스로부터 생성된 것인지를 판별한다. (객체 instanceof 클래스) 에서 객체가 해당 클래스 혹은 그 하위 클래스로부터 생성된 객체이면 true, 아니면 false를 반환한다.

싱글톤 패턴 구현

스프링은 기업용 온라인 서비스 기술을 지원하기 위해 탄생했다. 웹 어플리케이션은 보통 여러 고객이 동시에 요청을 한다. 그럼 같은 요청이 올 때 마다 고객은 다르니까 여러개 객체를 생성해서 각각의 클라이언트한테 전달해줘야한다. 스프링 없는 순수한 DI컨테이너인 AppConfig는 요청할 때마다 객체를 새로 생성한다. 고객 트래픽이 초당 100이 나오면 초당 100개 객체가 생성되고 소멸된다. 따라서 메모리 낭비가 심하다. 이러한 문제의 해결 방안은 객체가 딱 1개만 생성되고, 공유되도록 설계하면 된다. 이러한 설계는 싱글톤 패턴을 사용하는 것이다. 싱글톤 패턴 적용 방법 어떤 누가 해당 클래스의 객체를 생성하든지 딱 하나만 생성되길 원하는 클래스가 있다. 그 클래스로 static 영역에 객체를 딱 1개만..

스프링 빈을 등록할 때는 크게 2가지 방법

스프링 빈을 등록할 때는 크게 두가지로 분류 가능. 1. 빈 자체를 직접 등록하는 방법. xml활용 2. 다른 하나는 우회해서 하는 방법. = 어노테이션을 통해 팩토리 메서드를 통해서 등록하는 방법. @Configuration public class AppConfig { @Bean public MemberService memberService() { return new MemberServiceImpl(memberRepository()); } @Bean public MemoryMemberRepository memberRepository() { return new MemoryMemberRepository(); } }

깃허브 꾸미기 (리드미 소개, I'm a night, Git stats)

아무것도 없었던 깃허브에 심플하게나마 꾸며보았다. 꾸미니 더 관리하고 싶은 마음이 생긴다. (관리 = 개발 공부 ㅎㅎ) 큰 욕심 없이 1, 2, 3가지를 하고싶었다. 1. 프로필 하단에 한국에 산다. 이메일 주소, 블로그 주소를 넣고싶었다. 2. 상단에 Hi there, 문구로 시작하는 소개글을 넣고싶었다. 3. 커밋하는 시간대와 내가 커밋을 몇번했고 pr은 몇번했는지 등등을 볼 수 있는 I'm a night와 Git Stats 를 넣고싶었다. 1. 프로필 하단에 한국에 산다. 이메일 주소, 블로그 주소를 넣고싶었다. 1번에 대한 것은 간단했다. Edit profile 눌러서 들어가면 되니까! 근데 메일 주소를 넣고싶은데 아무리봐도 메일주소 아이콘이 보이질 않았다. 그래서 검색해보니, 추가로 대표적으로 ..

[SQL] 날짜 함수, CASE 문

INDEX 1. 현재 시간 출력 2. 날짜형 간의 뺄셈 3. 현재 날짜에서 1일 후 4. CASE문 (검색 CASE) 5. COALESCE 6. 또 하나의 CASE문 (단순 CASE) 7. 단순 CASE로는 NULL값을 비교할 수 없다. 1. 현재 시간 출력 SELECT CURRENT_TIMESTAMP; 2023-11-09 12:46:55 * 날짜 데이터는 서식을 지정할 수 있다. (문자열 데이터, 날짜형 데이터) 2. 날짜형 간의 뺄셈 SELECT DATEDIFF('2023-01-31','2023-01-01'); 30 3. 현재 날짜에서 1일 후 SELECT CURRENT_DATE + INTERVAL 1 DAY; 2023-11-10 4. CASE문 (검색 CASE) CASE문으로 데이터 변환하기 SEL..