Why? 외장 톰캣으로 어플리케이션을 재구동한다면 shutdown.sh를 실행하면되지만, 내장 톰캣(스프링 부트) 애플리케이션을 재구동한다면 일반적으로 서버 구동시 pid를 미리 저장해두고 종료가 필요한 시점에해당 pid값으로 kill한다. 바로 이 pid를 만들어주는 방법 중에 하나가 ApplicationPidFileWriter객체의 사용이다. 자동 배포를 할때, 자동으로 재구동하기위해 pid를 설정해준다. PID 만들기 PID 생성 경로 지정 spring: pid: file: test-app.pid # PID 파일 생성 경로 지정 Main 메소드 ApplicationPidFileWriter 생성 @SpringBootApplication 을 적용한 메인 Application의 main()메소드에서 아래..
lambda 먼저 lambda에 대한 설명은 여기를 참고하자. https://wouldyou.tistory.com/63 [java] Lambda 람다란? 람다함수 람다함수는 메소드를 하나의 식(Expression)으로 표현하는 것으로 익명함수(Anonymous function)를 생성 한다. 함수형 프로그래밍을 하고자 하며 나왔다고 한다. 자바에서는 메소드 혼자 선언 wouldyou.tistory.com callback만들기 functional interface를 하나 생성해준다. interface Testable { void run(); } interface를 아래와 같이 구현하면 callback처럼 사용할 수 있다. public class Example { // 인터페이스 Testable로 된 클래스..
객체지향에 대한 오해 객체지향의 목표는 실세계를 모방하는 것이아니다(설명하는데 도움은 되지만 똑같이 만들어야 좋다는 사실은 오해다) 실세계를 은유하는 것이다. 객체지향은 클래스가 아니다. 객체지향을 구현하는 방법중에서 클래스가 중요하게 다루어지는 것 뿐이다. javascript의 prototype으로 객체지향을 구현할 수도 있다. 책임주도설계 객체지향적으로 사고할 때 보통 클래스를 만들어놓고 어떤 클래스가 어떤 역할을 할지 생각하는 경우가 많은데, 오히려 그 반대의 경우가 효과적이다. 객체와 객체는 메시지를 통해 협력한다. 메시지를 먼저 찾고, 어떤 객체에게 메시지가 전달될지 찾는 것이 합당하다. 이것을 책임-주도설계라고 한다. 우리가 익히 아는 TDD도 마찬가지다. TDD는 test를 먼저 작성하며 어..
@RequestPart란? @RequestPart는 @RequestParam과 마찬가지로 String, form, multipart데이터를 받지만, JSON, multipart 복잡한 데이터를 받는데 주로 사용된다. @RequestParam VS @RequestPart VS @ ReqeustBody 그럼 차이점이 무엇일까? 이 세가지 어노테이션을 비교해보며 ReqeustPart에대해 알아보자. @RequestParam과 @RequestPart는 둘 다 파라메터를 받는데서 사용한다. String, from, Multipart 데이터를 받을 수 있다. @RequestBody는 바디에 있는 데이터를 꺼내는 역할을 한다. @RequestBody post등의 방식으로 body에 데이터를 넣어주었을 때만 사용한다...
Vite에서 절대경로로 Alias를 사용하려면 vite.config.js의 resolve.alias를 추가해 주어야 한다. import { defineConfig } from 'vite' import react from '@vitejs/plugin-react' import path from 'path'; export default defineConfig({ plugins: [react()], resolve: { alias: { '@': path.resolve(__dirname, './src') } }, }) import는 아래와 같이 할 수 있다. //test.js alert('import!') import "@/css/test" ... alias옵션의 자세한 옵션들은 아래를 참고하자 참고 https:/..
개발 중에 이러한 warning을 발견했다. ... M_OP_LINK] entity uses both @NotFound(action = NotFoundAction.IGNORE) and FetchType.LAZY. The NotFoundAction.IGNORE @ManyToOne and @OneToOne associations are always fetched eagerly. FetchType.LAZY로 써줬는데, EAGER로 동작하더라 warning을 해석해보면 ~One으로 끝나는 join 은 NotFoundAction.IGNORE와 FetchType.LAZY를 함께쓰면 언제나 FetchType.EAGER로 동작한다는 것을 알 수 있다. 왜 그럴까? 먼저 LAZY가 어떻게 동작하는지 보자. 예를 들어서 ..
개인적으로 spring shceduler와 quartz shceduler가 같은건 줄 알았는데, 알고보니 다른거여서 다시 포스팅을 남긴다. Spring scheduler spring scheduler는 spring에서 built in 으로 제공한다. quartz보다 훨씬 간단하게 사용할 수 있다는 장점이 있다. 프로젝트가 복잡하지 않고 단순히 scheduling과 bean만 필요하다면 quartz보다 spring scheduler가 낫다. 메인메소드에 @EnabledScheduling을 달아주고, @EnableScheduling @SpringBootApplication public class Application() { public static void main(String[] args) { Spring..
어느날 갑자기 프로젝트를 열어봤더니 톰캣 로그 한글이 깨져있었다. 데이터를 받는 프론트쪽에서도 한글이 깨지고 있었다. 한글 깨짐은 인코딩 문제이다. 해결방법 ctrl + alt + s를 눌러 settings에 들어간다. Editor > FileEncodings에 들어간다. 모든 인코딩을 UTF-8로변경하고 path에 프로젝트 루트를 넣어 UTF-8로 설정한다.