[querydsl] @queryProjection vs Projections.constructor
·
Backend/JPA
@QueryProjection vs Projections.constructor constructor : 실제 유저가 코드를 실행하는 순간이 되어서야 문제를 찾을 수 있음, 어떤 파라미터가 필요한지 찾기 어려움 @QueryProjection : 컴파일 단계에 에러를 해결할 수 있다. → querydsl의 의존적으로 설계하게 됨 둘 다 장단점이 있으므로, 본인 프로젝트의 아키텍처에 맞는 선택을 하면 됨
Content type 'application/octet-stream' not supported 에러
·
Backend/Spring Boot
controller에서 multipartFile 타입의 이미지와 json 타입의 dto를 같이 받기 위해 requestpart를 사용하면서 만난 오류이다. dto는 requestbody를 통한 전달이 아닌 form-data로 전달을 해주어야 했고, 그 상황에서 json 타입의 데이터를 보내는 방식에서 문제가 생겼다. form-data 타입의 key-value 값으로 json을 보내줄 때는 content-type을 application/json으로 직접 명시해주자 !! 문제 해결 :)
프로세스 vs 스레드
·
Computer Science/Operating System
프로세스 (Process) 프로그램과 프로세스 프로그램은 윈도우의 *.exe 파일이나 Mac의 *.dmg 파일과 같은 컴퓨터에서 실행할 수 있는 파일을 통칭한다. 아직 파일을 실행하지 않은 상태이기 때문에 정적 프로그램 즉, 프로그램이라고 부른다. 이와 대조적으로 프로세스는 다음에 실행할 명령어를 지정하는 프로그램 카운터와 관련 자원의 집합을 가진 능동적인 존재이다. 프로그램 프로세스 어떤 작업을 하기 위해 실행할 수 있는 파일 실행되어 작업중인 컴퓨터 프로그램 파일이 저장 장치에 있지만 메모리에는 올라가 있지 않은 정적인 상태 메모리에 적재되고 CPU 자원을 할당받아 프로그램이 실행되고 있는 상태 코드 덩어리 코드 덩어리를 실행한 것 프로세스 주소 공간 프로그램을 실행 시켜 정적인 프로그램이 동적으로 ..
운영체제란 ?
·
Computer Science/Operating System
운영체제란 무엇인가 ‘사용자가 컴퓨터를 쉽게 다룰 수 있게 해주는 인터페이스’ 운영체제는 컴퓨터 하드웨어를 관리하는 소프트웨어이다. 좀 더 이해하기 쉽게 설명해보자. 운영체제는 소프트웨어로서, 다양한 사용자를 위해 다양한 응용 프로그램 간의 하드웨어 사용을 제어하고 조정하는 역할 을 한다. 운영체제는 그 자체로서 유용한 기능을 수행하지 못하며, 다른 프로그램들이 유용한 작업을 할 수 있는 환경을 제공할 뿐이다. 예를 들어, 아이패드를 켜면 전원이 들어와 장치를 깨우고 사용자의 명령에 따라 친구에게 문자를 보내고, 음악을 듣는 동작들을 관리하는 것들을 전부 운영체제라 할 수 있다. 그래 무슨 느낌인진 알겠는데, 정확히 운영체제가 뭔데? 라고 할 수도 있을 것 같다. 내가 그렇게 말하고 싶으니까. 명확하게 ..
SOLID 5가지 원칙
·
Backend/Java
SRP 단일 책임 원칙(Single responsibility principle) 하나의 클래스는 하나의 책임만 가져야 한다. 하나의 책임은 모호하다. 클 수도 있고, 작을 수도 있으며, 문맥과 상황에 따라 다르다. 중요한 기준은 변경이다. 변경이 있을 때 파급 효과가 적으면 단일 책임 원칙을 잘 따른 것 UI 변경, 객체의 생성과 사용을 분리 OCP 개방-폐쇄 원칙(Open/closed principle) 소프트웨어 요소는 확장에는 열려있으나 변경에는 닫혀 있어야 한다. 다형성을 활용해보기 인터페이스를 구현한 새로운 클래스를 하나 만들어서 새로운 기능을 구현 지금까지 배운 역할과 구현의 분리를 생각해보기 문제점 MemberService 클라이언트가 구현 클래스를 직접 선택 MemberRepository..
DTO vs VO
·
Backend/Spring Boot
DTO : 데이터 전달용 = Data Transfer Object = 데이터를 전달하기 위해 사용하는 객체 = 데이터를 담아서 전달하는 바구니 - 오직 getter/setter 메서드만을 갖는다. setter를 사용하지 않고 생성자 메서드를 사용한다면 불변 객체로 만들어 중간에 데이터 위변조를 막을 수 있다. - 다른 로직을 갖지 않는다. - DTO class와 Entity class를 분리하라. VO : 값 표현 = Value Object = 값 그 자체를 표현하는 객체 - VO의 경우 값 그 자체를 나타내는 객체로써, 핵심은 필드 값이 같다면 두 객체를 같은 객체로 본다는 것이다. 이때 당연하게도 주소값을 비교하는 경우의 문제점을 위해서 hashcode()와 equals()를 재정의하여 필드 값이 같..
h2 database?
·
Computer Science/DataBase
h2 Database - 자바 기반의 오픈소스 관계형 데이터 베이스 관리 시스템(RDBMS) - h2 db는 Server mode, Embedded mode, In-Memory mode를 제공한다. - 용량은 2MB(압축버전) 이하로 매우 저용량으로 가볍고 빠르며, JDBC API 또한 지원하고 있다. - 데이터를 디스크에 저장하는 Mysql이나 Oracle과 같은 DBMS와는 다르게 데이터 스토리지의 메인 메모리에 설치되어 운영되는 방식의 RDBMS이다. - 디스크 접근이 메모리 접근보다 느리기 때문에 인메모리 데이터베이스가 DBMS보다 더 빠르다. 하지만, 인메모리 데이터의 휘발성이다. 데이터가 날라가기 때문에 계속해서 저장할 데이터는 저장할 수 없다. 따라서, 테스트 DB로 많이 사용한다.
mariadb build 시 트러블 슈팅 해결하기 (포트 변경 및 vim 설치하기)
·
DevOps/docker
bash에 vim을 설치하게 된 이유는 docker에 mariadb를 설치하고 datagrip으로 접속을 시도했다. db접속을 위해 Test Connetion을 시도하였으나, 아래와 같은 오류 발생 ! Could not connect to localhost:3307 : unexpected end of stream, read 0 bytes from 4 (socket was closed by server). 이를 해결하기 위해 default로 설정된 포트를 변경해주려 한다.(접근하려는 PORT와 설정된 PORT가 불일치하므로) 그러기 위해선 my.cnf 파일수정이 필요하다. ps 명령어를 통해 연결된 포트를 확인해본다. 3306은 mysql로 되어있기 때문에(다른 걸 써도 무방하다. 본인의 취향에 맞게 설정..
prepareKotlinBuildScriptModel Task fails in a Java project 오류 해결
·
Backend/Spring Boot
tasks.register("prepareKotlinBuildScriptModel"){ } build.gradle에 추가해주기 ! 해결 완!
[postman] post 방식으로 file 전송 시 working directory 오류 해결하기
·
etc
settings > General > working directory에서 아래와 같이 'Read files ... '를 활성화 시켜주자. 다시 실행해보면 정상적으로 작동한다.
[수학] 소수 구하기
·
Computer Science/Algorithms
소수 판별 알고리즘 1. 1과 자기 자신을 제외한 나머지 수 중에서 약수가 있는 -> 시간 복잡도 O(n) 1을 제외한 2부터 n-1까지 탐색하면서 i로 나누어 떨어지는 수가 있는지 확인 static boolean isPrime(int N) { if (N < 2) return false; for (int i=2; i 시간 복잡도 : O(루트 n) 만약 N이 12라 할때, 12의 제곱근은 약 3.46이다. 12의 약수는 1, 2, 3, 4, 6, 12 이다. 여기서 1과 12를 제외했을 때 이는 2 * 6, 3 * 4, 4 * 3, 6 * 2의 결과이다. 따라서 N의 제곱근까지 나누어 떨어지는지 여부를 조사하면 더 빠르게 소수판별을 할 수 있다. static boolean prime(int n) { if(..
[수학] - 최소공배수, 최대공약수 구하기
·
Computer Science/Algorithms
최소 공배수 import java.util.*; public class Main { private static int gcd(int a, int b) { if (a == 0) return b; return gcd(b%a, a); } private static void lcm(int a, int b) { System.out.println(a / b); } public static void main(String[] args) { // 여기에 코드를 작성해주세요. Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int m = sc.nextInt(); lcm(n*m, gcd(n,m)); } } 최대 공약수 import java.util.*; public ..