본문 바로가기

Spring130

@ConfigurationProperties / @ConfigurationPropertiesBean url: naver: www.naver.com depth: google: www.google.com yml 에 설정한 값들을 편리하게 사용할 수 있는 어노테이션입니다. 기존에 프로젝트에서 사용했던 방법은 2가지를 사용했습니다. 1. Enviroment 를 사용 2. 각각의 설정파일을 불러 객체로 만들어 사용 @ConfigurationProperties / @ConfigurationPropertiesBean 를 사용하게 되면 객체지향적으로 설정파일의 값을 사용할 수 있습니다. application.yml 을 간단히 설정했습니다. naver 처럼 첫 줄에 값을 설정할 수도 있지만, google 처럼 두번째 depth 로 사용하는 경우도 많습니다. url: naver: www.naver.com depth: g.. 2023. 8. 23.
@Transactional 에 대해 @Transaction 스프링 프레임워크를 사용하면 보통 서비스 레이어(비즈니스로직) 에 @Transactional 어노테이션을 선언해 트랜잭션을 시작한다. 해당 어노테이션에 있으면, 메서드를 호출하기 직전에 스프링의 AOP 가 먼저 동작한다. 메서드가 시작하기 전 트랜잭션을 시작한다. 메서드가 정상적으로 종료되면 트랜잭션을 커밋하면서 종료한다. 트랜잭션을 커밋할 때, 플러시 하면서 DB에 저장하고 커밋한다. 만약, 예외가 발생하면 트랜잭션을 롤백하고 종료한다 ( 커밋은 발생 X ) + 기본적으로 Unchecked Exception, Error 만을 롤백한다. 트랜잭션이란? 데이터베이스의 상태를 변경하는 작업 또는 한번에 수행되어야 하는 연산 Begin , commit 을 자동으로 수행 예외 발생 시, .. 2023. 8. 15.
동적 프록시란 ? 먼저, Spring Boot 2.0 이상부터 CGLIB 가 기본으로 적용되어 사용되고 있다. Spring AOP 에는 JDK proxy 를 기본으로 사용한다. 단, 인터페이스가 없는 경우에는 CGLIB 을 사용한다. CGLIB 을 디폴트로 사용하고 있는 이유는 인터페이스 기반의 프록시 ( JDK proxy ) 는 때때로, ClassCast Exceptions 를 추적하기 어렵다고 한다. ( 단순히 생각해도, 인터페이스보다 구현하고 있는 클래스를 기반으로 프록시를 만드는 것이 더 정확할 것. ) Spring AOP 는 기본적으로 프록시 방식을 사용한다. 프록시는 객체를 직접적으로 참조하는게 아닌, 해당 객체를 대신하는 객체를 통해 객체에 접근하는 방식. 프록시 객체없이 타겟에 접근하게 되면, 직접 호출하는.. 2023. 8. 11.
Java Bean / POJO / Spring Bean 간단 설명 Java Bean 과 POJO , Spring Bean 의 차이점에 대해 간단히 알아보겠습니다. 1. Java Bean 은 옛날 EJB 로 개발하는 시절에 중요했던 개념입니다. 현재는 EJB 로 개발하는 일은 많이 없다고 합니다. Java Bean 은 3가지 제약사항이 있습니다. - default 생성자는 public 이어야 하며, 파라미터가 없어야 합니다. - 클래스의 속성에 접근할 수 있는 getter / setter 가 있어야 합니다. - 해당 클래스는 Serializable 을 implement 해야 합니다. 코드로 알아보면 아래와 같은 형태를 나타냅니다. import java.io.Serializable; public class JavaBean implements Serializable { pr.. 2023. 7. 29.
[Java] Double Type 은 Integer 타입과의 연산에서 소수점을 버린다. Double Type 은 Integer 타입과 연산할 때 소수점을 버리게 되어, 연산 시 다시한번 더 해당 내용을 상기시키며 로직을 작성해야 합니다. 돈과 관련된 내용이라면 더욱더 타입이 달랐을 때를 생각해야 합니다. querydsl 에서는 mutiply() 라는 메서드를 제공하고 있습니다. 정말 단순히 생각하면 곱하기를 해주는 메서드이기 때문에, 그냥 사용하는 경우가 있습니다. 저 같은 경우에는, 환불금액에 관련된 querydsl 로직을 작성하던 중 해당 금액에 대한 20% 의 값을 구해 그 값을 사용해야 했었는데 단순히 mutiply(0.2) 를 해 테스트를 해보았더니 모든 결과값이 0 으로 발생했습니다. 아래는 정상적으로 통과하는 테스트 코드입니다. 모든 Q 타입의 객체는 Integer 타입입니다... 2023. 7. 22.
var 타입은 사용하는 것이 좋을까 ? - in Java 먼저 var 타입은 Java 10 에서 도입되었습니다. 변수를 선언할 때 타입을 생략할 수 있으며, 컴파일러가 타입을 추론합니다. var now = LocalDateTime.now(); . 프로젝트 중 반환타입이 길 경우, 코드 컨벤션으로 인해서 칸이 나눠지거나 파라미터가 마음에 들지 않게 내려가는 등, 이쁘지 않은? 것처럼 자동완성 되는 경우가 많았습니다. 지금까지 단순히 타입이 길어서 var 로 바꿔 사용하는 경우가 있었는데, 이후 코드를 다시 보니 어떤 반환타입인지 바로 보이지 않아, 가독성이 떨어진다는 생각을 하게 되었습니다. var 타입에 대해서, 개발자들의 의견이 나뉘는 것 같습니다. stackoverflow 에서도 이것에 대해 각자 다른 주장을 하는 것을 볼 수 있었습니다. https://s.. 2023. 7. 16.
Linux Json File UTF-8 convert EUC-KR 방법 Linux 에서 파일의 locale 을 EUC-KR 로 변환 하는 방법을 알아보겠습니다. 먼저, UTF-8 과 EUC-KR 에 대해서는 아래 블로그를 참고하면 좋을 거 같습니다. 간단히 말하면 EUC-KR 은 KR 이 붙은 것처럼 각 나라들마다 문자열의 표라고 생각하면 됩니다. UTF-8 은 전세계의 모든 문자를 유니코드에 하나로 합친 것을 의미합니다. https://coding-factory.tistory.com/810 [ETC.] UTF-8과 EUC-KR의 차이점에 대하여 보통 한글이 깨졌다고 하죠. 개발을 하다 보면 한글이 제대로 표현된 프로젝트를 import 시켰을 때 아래 그림처럼 한글이 깨지는 경험이 있으실 겁니다. 대체 이런 상황은 왜 발생하는 것일까요? coding-factory.tisto.. 2023. 7. 15.
LogRotate Process 서버를 운영하다보면 로그를 보고 서버의 상태, 장애를 대비합니다. 대부분의 로그 기록을 남기도록 설정하는데, 시간이 지남에 따라 엄청난 크기로 커지게 됩니다. 이러한 것을 대비하기 위해 로그를 잘 관리하도록 설정하는 기능을 logrotate 라고 합니다. 기본 프로세스와 개념만 확인하고, 이후 스터디와 실무 작성은 기존에 작성되어있는 회사의 LogRotate 스크립트를 보고 참고해 작성할 예정입니다. Logratate 실행순서 crontab Cron.daily Logrotate Logrotate.conf Logrotate.d Logrotate 파일구조 데몬 프로그램 : /usr/sbin/logrotate Logrotate 데몬 설정파일 : /etc/logrotate.conf Logrotate 프로세스 설.. 2023. 5. 28.
AWS - IAM IAM : Identity and Access Management 사용자를 생성하고 그룹에 배치하기 때문에 글로벌 서비스에 속합니다. 루트계정을 생성할 때 기본적으로 사용하고 있습니다. 루트계정은 더 이상 사용해서도, 공유해서는 안됩니다, 사용자를 생성해서 사용합니다. 한 조직의 한 사람이 되며, 그룹으로 묶을 수도 있습니다. 아래의 사진처럼 그룹에 속한사람이 있으며, 속하지 않은 사람이 있을 수도 있고, 동시에 여러 그룹에 속한 사람이 존재할 수 도 있습니다. IAM 은 권한을 설정할 수 있습니다. 그룹의 유저들에게 JSON 형식으로 된 문서를 작성해서 정책을 정해줄 수 있습니다. AWS 에서는 사용자에게 최소한의 권한을 갖도록 권장하고 있습니다. 모든 사용자들이 모든 권한을 갖게 된다면 엉망이 될 수.. 2023. 5. 17.