Backend Backend 2021. 8. 6. Legacy Application을 Executable Jar로 만들자 어떤 동영상을 변환하는 배치가 있다. 이 배치는... 빌드도구가 적용되어있지 않고 프로젝트 내부에 각종 설정파일이 들어있고 수정한 클래스 파일을 하나씩 복사 붙여넣기로 배포한다. 실행은 start.bat을 실행시킨다. 이 파일은 java 실행명령에 클래스패스와 메인 클래스를 호출하는 방식으로 동작한다. 이 배치를 Executable Jar로 만들고 싶었다. 이렇게 바꿔야 될 프로그램이 2개정도 더 있어서 기록해본다. 메이븐 프로젝트로 변환한다. 인텔리제이의 경우 프로젝트 우클릭 → Add Framework Support → Maven 을 추가하면 pom.xml이 생성된다. 팀에서 이클립스를 사용중이라면 다른사람도 메이븐 프로젝트로 열리도록 convert를 잘 해주자. 의존하고 있는 라이브러리를 모두 po.. Backend 2021. 5. 6. Effective Java (1) - 아이템1, 2 생성자 대신 정적 팩터리 메서드를 고려하라 클래스의 인스턴스를 반환하는 기법으로 정적 팩터리 메서드라는게 있다. 다음은 그런 기법이 적용 된 Boolean의 valueOf 메서드이다. public static Boolean valueOf(boolean b) { return b ? Boolean.TRUE : Boolean.FALSE } 정적 팩터리 메서드의 장점 정적 팩터리 메서드를 구현함으로써 다음 5가지의 장점을 얻을 수 있다. 이름을 가질 수 있다. 생성자와는 다르게 반환하는 객체의 특성을 메서드 이름에 나타낼 수 있다. 소수를 반환하는 메서드인 BigInteger.probablePrime이 그 예시다. 호출 될 때마다 인스턴스를 새로 생성하지 않아도 된다. 필요에 따라 인스턴스를 미리 만들어놓거나 .. Backend 2021. 4. 11. JPA (2) - 웹 계층 개발 웹 계층 개발 Validation Form객체나 DTO 객체에 @NotEmpty 등등 Validation 어노테이션을 적용할 수 있다. Controller Parameter 앞에는 @Valid를 표기하여 Validation을 사용할 수 있다. @Valid와 BindingResult를 함께 쓰면 화면으로 Validation 정보를 보낼 수 있다. Entity와 DTO SSR 템플릿 엔진의 경우 컨트롤러에서 Entity를 반환해도 딱히 문제가 없다. API를 만들 때는 절대로 컨트롤러에서 Entity를 반환하면 안된다. 노출하고싶지 않은 정보를 노출하게 될 수도 있고 Entity를 변경할 때 API스펙도 함께 바뀌어버리기 때문 기타 IntelliJ에서 Ctrl+E를 누르면 최근 파일들을 조회할 수 있음. I.. Backend 2021. 4. 11. JPA (1) - 도메인 개발 도메인 모델과 테이블 설계 테이블 - N:M 관계 설계 JPA의 다대다 @ManyToMany는 운영에서는 사용하면 안된다. 반드시 1:N, N:1로 풀어내야 하고, 테이블 설계시에는 N:M이 불가하기 때문에 중간에 매핑테이블을 두어야 한다(억지로 만들면 가능은 하지만 정상적인 경우는 불가능하다고 생각하자). @ManyToMany와 @JoinTable을 통해 매핑 할 경우 매핑 테이블이 자동 생성되는데 문제는 이 테이블을 변경할 수 없어서 실무 활용도가 매우 떨어진다. 엔티티 - 연관 관계의 주인 설계단계에서는 가급적이면 단방향 연관관계로 설계하는게 좋다. 양방향으로 설계했다면 연관관계 설계 시 연관관계의 주인을 정해야 한다. 외래 키가 있는 곳을 연관관계의 주인으로 정한다. 절대로 비즈니스상으로 우위에 .. Backend 2021. 3. 1. Spring Cloud 일단 기록하기 1. application.yml 주의사항 eureka: client: service-url: defaultZone: http://localhost:8761/eureka/, http://localhost:8762/eureka/ defaultZone을 default-zone으로 쓰면 안된다... 설명링크: cloud.spring.io/spring-cloud-netflix/reference/html/#registering-with-eureka >>> The defaultZone property is case sensitive and requires camel case because the serviceUrl property is a Map. Therefore, the defaultZone property d.. Backend 2020. 7. 3. Spring Core (4) AOP Spring AOP Aspect-oriented Programming은 흩어진 Aspect를 모듈화 할 수 있는 프로그래밍 기법으로, OOP와는 상호 보완적인 관계이다. AOP의 구현체로 AspectJ와 Spring AOP가 있는데, AspectJ가 좀 더 세분화 된 설정을 할 수 있는 구현체라고 보면 된다. AOP 주요 개념 Aspect: 각각의 관점 모듈 Target: 적용 대상 Advice: 해야 할 일들(로직 처리) Pointcut : 적용 할 구체적인 위치 JoinPoint: 합류 지점의 유형(Vue 라이프 사이클 훅과 비슷하다?) AOP 적용 방식 컴파일: 컴파일 시 Aspect를 Bytecode로 Class 파일에 포함시키는 방식 로드 타임: Bytecode를 JVM에 로딩할 때 Aspect.. Backend 2020. 7. 2. Spring Core (3) Abstraction 6. Abstraction A. Resource Resource는 java.net.URL 을 추상화 한 인터페이스로, 스프링 내부에서 정말 많이 사용된다. 단적인 예로 new ClassPathXmlApplicationContext("abc.xml") 생성자를 호출 할 경우 내부적으로 파일명(문자열)을 Resource 객체로 변환한다. Resource로 추상화함으로써 클래스 패스, 웹 루트 등 다양한 경로의 리소스를 손쉽게 읽어올 수 있고, 해당 리소스에 대한 부가적인 정보도 쉽게 얻을 수 있다 Resource의 메소드 getInputStream() exist() isOpen() getDescription() Resource의 구현체 UrlResource ClassPathResource FileSystem.. Backend 2020. 6. 30. Spring Core (2) IoC - 2 4. Bean의 Scope 스프링 빈은 기본적으로 싱글톤 스코프를 가진다. 싱글톤 빈은 IoC 컨테이너 내에서 유일한 객체로, 의존성 주입 시 항상 동일한 객체를 사용한다. 따라서 만약 싱글톤 객체 내부에 필드가 있다면 해당 필드의 값이 공유된다(멀티 스레드 환경에서 주의!!). 이와 반대되는 개념으로 프로토타입 스코프가 있다. 프로토 타입 스코프로는 Request, Session, WebSocket 등이 있다. [Single.java] @Component public class Single { @Autowired private Proto proto; public Proto getProto() { return proto; } } [Proto.java] @Scope(value = "prototype") @.. 이전 1 2 3 다음