백엔드

BigDecimal 나눗셈 시 소수점 자릿수가 무한대 일 경우 "Non-terminating decimal expansion; no exact representable decimal result" 오류가 발생한다. 적절하게 scale 처리를 해주어야 한다. 기존 나눗셈 처리시 BigDecimal 의 정적변수 대신 RoundingMode enum 클래스를 사용한다. bigDecimal.divide(new BigDecimal(3), 3, BigDecimal.ROUND_HALF_UP); bigDecimal.divide(new BigDecimal(3), 3, RoundingMode.HALF_UP);
상속과 컴포지션에 대해 알아보겠습니다. 상속은 부모클래스의 정의된 필드와 메서드를 자식클래스에서 물려 받는 것이고 컴포지션은 private 필드를 통하여 기존 클래스에 다른 클래스 인스턴스를 전달받는 것 입니다. 위의 설명 클래스들이 아래 소스에서와 같이 기존 클래스(Test)와 부모클래스(Test2), 다른 클래스(Test3)이 있습니다. public class Test extends Test2 { // 상속 private final Test3 test3; // 컴포지션 public Test(Test3 test3) { this.test3 = test3; } @Override protected void on() { super.on(); test3.on(); } public static void main(..
스프링의 주요 개념에 대해 간단히 알아보겠습니다. IoC (Inversion of Control) 제어의 역전 제어의 역전, 즉 초기에 개발자가 객체를 생성하고 주입해 주던 것을 프레임워크에 의해 동작되는 것을 말합니다. 스프링에서는 Application Context에서 Bean을 생성하고 주입시켜 줍니다. DI (Dependency Injection) 의존성 주입 IoC의 대표적인 동작원리로 외부로부터 다이내믹하게 오브젝트를 주입받는 것을 말합니다. 다음과 같은 원칙을 따릅니다. 클래스 모델이나 코드에는 런타임 시점의 의존관계가 드러나지 않는다. 즉 인터페이스에 의존하고 있어야 합니다. 런타임 시점의 의존관계는 컨테이너나 팩토리 같은 제3의 존재가 결정합니다. 의존관계는 사용할 오브젝트에 대한 레퍼런..
자바 8에 추가된 API인 스트림에 대해 알아보겠습니다. Stream API? Stream API란 데이터 처리 연산을 지원하도록 소스에서 추출된 연속된 데이터입니다. Stream은 마치 Builder 패턴과 비슷하게 내부 반복을 통해 데이터 처리 연산을 적용합니다. ! 기존 Collection을 for 문으로 반복하는 방식은 외부 반복 Stream API 특징 - 선언형 : 더 간결하고 가독성이 좋아진다. - 조립할 수 있음 : 유연성이 좋아진다. - 병렬화 : 성능이 좋아진다. Stream 이용과정 스트림은 질의를 수행할 데이터 소스를 중간 연산을 거쳐 최종 연산을 합니다. 예를 들어 아래와 같은 ArrayList가 존재한다고 가정했을 때 // ArrayList 객체에 추가 된 목록이 있다고 가정 L..
Java에서는 값을 비교 할 때 동일성 (==), 동등성 (equals)로 비교합니다. 이중에서 Long을 동일성(==) 비교했을 때 어떤 일이 발생하는지 알아보겠습니다~ Long을 동일성 비교하게되면, 특정 상수풀(-128 ~ 127) 까지는 정상적으로 동작을합니다. 이래서 아무생각없이 함정에 빠졌습니다. 127 이상으로 넘어가니 동일성으로 비교가 되지않는 것을 확인했습니다. 결론은 객체 비교는 항상 equals를 사용하자 입니다.
Java ChcekdException, UncheckedException과 Srping에서 DB @Transactional 어노테이션을 사용했을 때 어떻게 되는지에 대한 글입니다. Exception은 자바에 대한 부분이고, @Transactional은 Spring에 대한 부분이라 카테고리를 Java로 잡아야 할지, Spring 으로 잡아야 할지 굉장히 고민되었던 부분입니다.😅 일단 자바의 Exception은 크게 두 부류로 나뉩니다. Checked Exception과 RuntimeException을 상속받은 Unchecked Exception으로 나뉘어집니다. RuntimeException은 이름에서도 알 수 있듯이 실행 시 발생하는 Exception이고, Checked Exception은 컴파일 시 확..
불변 객체와 가변 객체는 Multi Thread 환경에서 개발할 때 이해해야 할 중요한 개념입니다. 일단은 단어에 대한 설명만 살펴보면 불변 객체 Java에서 Class의 인스턴스가 생성 된 후 상태가 변하지 않는 객체, Multi Thread 환경에서 안전하게 사용할 수 있다는 신뢰성이 보장됩니다. 가변 객체 Java에서 Class의 인스턴스가 생성 된 후 상태가 변할 수 있는 객체, Multi Thread 환경에서 별도의 동기화 처리가 필요합니다. 이렇게 글로만 보면 무슨 말인지 잘 이해가 안갑니다. Java에서 Class의 인스턴스가 생성 -> 소스에서 new Class(); 상태가 변하지 않는 -> 어렵습니다.. 뭔 상태요.. 예를 들어 클래스가 있으면 클래스 안의 멤버변수가 Primitive T..
개발을 막 시작했을 무렵(1년?)부터, Spring Security를 처음부터 설정해본게 한 3~4번은 되는 것 같은데, Security에 대한 구조를 부분 부분만 이해하고 있는 것 같아서 정리 하기위해 적습니다. Filter는 이 글에서 다루지 않겠습니다. 길이 너무 길어지기도 하고, 내용도 꽤나 많기 때문에... Spring Security에서의 용어를 확실하게 알고 이해하면 더 쉽기 때문에 먼저 용어정리를 합니다. Spring Security에서 사용되는 용어 접근주체 (Principal) - 보호받는 리소스에 접근하는 대상 - ex) 로그인 아이디 비밀번호 (Credential) - 인증을 위한 비밀번호 - ex) 로그인 패스워드 권한 (Authority) - 해당 사용자가 자원에 접근 가능한지 ..
JVM에 대해 다시 공부하다, 정리가 한 번 필요할 것 같아서 정리 해봅니다. 개발자들이 작성한 .java 코드가 어떻게 실행 되는지 한 눈에 알아 볼 수 있는 그림입니다. Java개발자라면 이클립스, 인텔리제이, vscode 등 IDE를 이용하여 개발할 때 JDK가 필요해 각자 본인 PC에 Java를 설치할 것 입니다. JDK를 설치하면 javac 명령어를 사용할 수 있습니다. javac 명령어로 .java 파일을 컴파일하게되면 바이트 코드인 .class 파일이 생성되고 JVM이 샐행할 메모리를 OS로 부터 할당 받습니다. 그 후 JVM의 Class Loader에 의해 클래스 파일을 읽어 옵니다. JVM 위에서 실행 되기때문에 Java를 OS에 상관없이 실행시킬 수 있습니다. 그럼 JVM은 어디에 있을..
요즘 TDD를 조금 씩 실천해보고 있는 와중 이것 저것 해보다, JPA Repository테스트를 좀 더 가볍게 진행하기 위해 @DataJpaTest 어노테이션을 사용해 보았습니다. @DataJpaTest 어노테이션을 사용하게 되면 장점은 JPA 관련 테스트 설정만 로드하게 된다. 1번의 이유로 테스트가 좀 더 가벼워 진다. 내장형 인메모리 DB를 사용하여 실제 데이터 베이스를 사용하지 않고 테스트 할 수 있다. 기본 적으로 @Transactional 어노테이션을 포함하고 있다. 테스트가 끝난 후 롤백된다. 가 있고, 테스트 시에는 다른 DB를 사용하고 싶다면, test/resources/application.yml 파일을 만든 후 datasource를 설정합니다. // application.yml sp..
infitry
'백엔드' 카테고리의 글 목록 (2 Page)