자바(7)
-
HttpMediaTypeNotAcceptableException: Could not find acceptable representation
위와 같은 코드를 작성했고 이 Controller에서 DB 조회 후 MemberResponseDTO에 담아 보내게 되는 단순한 로직이다. 전에는 갑자기 잘 되던 api 가 ResponseDTO로 바꾸고 나서 잘 안 되길래 뭔가 싶더니 HttpMediaTypeNotAcceptableException라는 에러가 났다. 그래서 직접 에러를 검색해 보니, 클라이언트가 받을 수 있는 response를 만들 수 없다는 에러이다. 실제로 postman에서도 다음과 같은 에러가 나온다. 하지만 로그를 보면 즉, DB에 쿼리를 하는 과정까지는 문제가 아니었음을 알 수 있다. 그렇다면 쿼리를 하고 나서 클라이언트에게 올바를 형태를 주지 못한다는 것이고, 그래서 DTO를 봤더니 @Getter 가 없었다. 여러분은 꼭 @Ge..
2023.10.30 -
비밀번호의 암호화 위치, 엔티티 내부 vs 서비스 계층?
위와 같은 단순한 게시판 프로젝트를 진행 중에 있다. 회원 엔티티의 password 필드는 프론트엔드에게서 받은 비밀번호를 암호화하여 저장하는 필드이다. 회원가입을 할 때 보통은 이 암호화라는 작업을 MemberService 계층 안에서 작업한다. public class MemberService { private final MemberRepository memberRepository; private final PasswordEncoder passwordEncoder; //회원 등록 @Transactional public void registerMember(MemberRegiDTO memberRegiDTO) { String name = memberRegiDTO.getName(); String passwor..
2023.10.17 -
???: "규칙에 예외를 둘 순 없어요", equals 오버라이딩은 일반 규약을 지켜 재정의하기 - (1)
1. 기본적으로 Object.equals() 는 Overriding 하지 않는 것이 정답이다.위 문장을 보고 이런 생각이 들었을 겁니다. "뭔 규약을 지켜 재정의하라면서, 애초에 하지 말라니?" 틀린 말은 아니다만, equals() 오버라이딩은 오류가 나기 쉬운 작업입니다. 그러기에 Equals 오버라이딩를 고민하고 있는 당신에게 만약 다음 상황들에 쳐해있다면 equals를 오버라이딩 하지 않는 것을 추천하지 않습니다!각 인스턴스가 고유하다. ex) Thread 클래스인스턴스의 '논리적 동치성' 을 검사할 일이 없다. ex) new Point(1,2), new Point(1,2)의 경우, 둘이 같다고 해석할 수도 있다.상위 클래스에서 재정의한 equals가 하위 클래스에서도 딱 들어맞는다. ex) Abs..
2023.08.01 -
finalize, cleaner 는 쓸모도 없는 데 대체 왜 있을까?
자바에는 2가지의 객체 소멸자가 존재한다finalize()cleaner()💡 객체 소멸자란?객체가 메모리에서 제거될 때 호출되는 함수나 메소드본래의 뜻과 같은 의도의 함수이지만객체 소멸자는 기본적으로 쓰지 말아야 한다. 왜냐하면 finalizer(), cleaner() 가 언제 실행된다는 보장이전적으로 GC 의 알고리즘에 달려 있어 프로그래머가 사용한다고 해도 보장을 받지 못하기 때문이다. 그래서 finalizer(), cleaner() 는 기본적으로 쓰지 말라고 하지만더더욱 쓰지 말아야 하는 순간과 상황들이 존재하게 되는 데이는 다음 경우들이다.상태를 영구적으로 수정하는 작업성능 문제보안 문제사실상 finalize, cleaner 안에서는 무엇을 보장받지 못한다.그렇다면 finalizer 와 clea..
2023.07.28 -
싱글톤(Singleton) 패턴
2023.05.09 - [디자인 패턴] - 소프트웨어 위기를 극복한 디자인 패턴의 탄생과 발전 소프트웨어 위기를 극복한 디자인 패턴의 탄생과 발전 먼저 디자인 패턴의 정의부터 바로 알아보겠습니다! 디자인 패턴은 S/W 설계에서 자주 발생하는 문제들을 해결하기 위해 사용되는 재사용 가능한 해결책이다. 아마 이 글을 읽으시는 분들 중 디 xpmxf4.tistory.com 해당 포스팅을 읽기 전 위 글을 읽고 오시는 것을 추천드려요! 위 글에서 디자인 패턴이 무엇인지, 그 필요성에 대해 알게 됐다면 이제는 본격적으로 디자인 패턴 즉 소프트웨어 솔루션들에 각 종류에 대해 알아보겠습니다! 디자인 패턴은 크게 3 가지 유형으로 나눠집니다! 생성 패턴 객체 생성에 관련된 패턴으로, 객체를 생성하는 방법과 시점을 결정..
2023.05.09 -
JIT 컴파일러의 이해와 자바와 자바스크립트에서의 활용
JIT 컴파일러란? JIT(Just-In-Time) 컴파일은 프로그램을 실제 실행하는 시점에 기계어로 번역하는 컴파일 기법입니다. 자바와 자바스크립트 모두 이 기법을 사용하지만, 두 언어의 동적 타입(dynamic type)과 정적 타입(static type) 특성에 따라 JIT 컴파일러가 다르게 작동합니다. 자바스크립트에서의 JIT 컴파일러 활용 반면, 자바스크립트는 동적 타입 언어입니다. 실행 전까지 변수나 함수에 넘겨지는 매개변수 같은 타입들에 대한 정보를 알 수 없습니다. 동적 타입 언어의 경우, 프로그램 실행 중에 변수의 타입이 변경될 수 있으므로, 실행 시점의 타입 정보를 활용하여 최적화를 수행해야 합니다. 자바스크립트 엔진들은 이러한 동적 타입 언어의 특성을 고려하여 JIT 컴파일러를 사용하..
2023.04.03 -
거품 정렬(Bubble Sort)이란?
거품 정렬(Bubble Sort)은 인접한 두 원소의 대소 관계를 비교하여 작은 값의 원소를 앞으로, 큰 값의 원소를 뒤로 교환하면서 정렬하는 알고리즘이다. 자료구조와 알고리즘을 공부해본 사람이라면 알겠지만, 가장 먼저 배우는 정렬 기법이기도 하다. 왜냐하면 이 알고리즘은 구현하기도, 이해하기에도 정말 쉽다는 게 장점이다. 하지만 으레 모든 방법이 장점이 있다면, 그에 수반하는 단점도 있는 법. 거품 정렬은 비교와 교환을 반복하면서 시간 복잡도가 O(n^2)으로 비효율적이며 정렬된 데이터에 대해서도 비교를 계속 하므로 최선의 경우에도 O(n^2)의 시간복잡도를 가지게 된다. 아래는 자바로 구현한 거품 정렬이다. public static void main(String[] args) { int[] arr =..
2023.03.15