Backend

Backend/Spring

[JPA] 복합 기본키, @IdClass vs @EmbeddedId

개요 졸업프로젝트에서 사용자가 다른 사용자의 산책기록을 보고 좋아요를 클릭하는 과정이 필요하다. 좋아요 테이블을 생성하던 중 복합 기본키를 생성하는 것이 필요해짐. 좋아요 테이블의 경우 User의 PK와 산책 기록의 PK 두 컬럼으로 이루어져 있다. 평소같았으면, PK를 추가했겠지만, 식별관계로 만들면서 PK가 따로 존재하지 않는다. 이 과정을 JPA로 어떻게 매핑하는지 확인해보자 복합 기본키를 생성하는 방법 2가지 2가지 방법의 공통점 두 방법 모두 Serializable 인터페이스를 구현하여 키 클래스를 생성해야 한다. hashCode(), equals() 두개의 메소드가 오버라이딩해야 한다. 기본 생성자가 필요하다. public 접근제어자 설정이 필요하다. @NoArgsConstructor @Equ..

Backend/JAVA

[JAVA] 동작 파라미터화에 대하여(모던 자바 인 액션)

0. 개요 사용자의 요구사항은 시시각각 변함 그에 맞게 엔지니어링을 꾸준히 변화해야 하는데, 비용을 최소화하면 좋음 동작 파라미터화를 통해 자주 바뀌는 요구사항에 대해 대응할 수 있도록 함 메소드의 인수로 코드 블록을 전달함으로써 ‘동작’ 자체를 인수로 전달할 수 있음. 리스트를 예로 들면, 아래처럼 진행 가능함 리스트의 모든 요소에 대해서 ‘어떤 동작’을 수행 리스트 관련 작업을 끝낸 다음 ‘어떤 다른 동작’ 수행 에러가 발생하면 ‘정해진 어떤 동작’을 수행 1. 변화하는 요구사항에 대응 예컨데, “필터링”하는 작업에서 기준이 달라지는 경우가 있다. 현재는 녹색사과만 선택(필터링)하고 있다. 만약, 빨간사과도 필터링하고자 하면 어떻게 고칠까?? public static List filterRedAppl..

Backend/Database

[DB] 물리삭제와 논리삭제

데이터베이스에서 삭제하는 방법은 용도에 따라 크게 '물리삭제'와 '논리삭제'로 나눌 수 있다. 물리삭제와 논리삭제 물리삭제는 SQL의 DELETE 명령을 이용해 직접 데이터를 삭제하자는 사고 방식이다. 삭제 대상 데이터는 "필요 없는 데이터이니 DELETE명령으로 테이블에서 삭제한다"라는 사고방식은 지극히 정상적이다. 한편 논리삭제의 경우, 테이블에 '삭제플래그'와 같은 열을 미리 준비하는 것이다. 테이블에서 실제로 행을 삭제하는 대신, UPDATE명령을 이용해 삭제플래그의 값을 유효하게 갱신하는 것이다. 논리삭제를 구현하는 방법은 삭제 플래그 말고도 여러 방법이 있다. 다만, 일반적으로는 삭제 플래그를 사용해서 논리삭제를 구현한다. 논리삭제의 장단점 논리삭제의 장점으로는 데이터를 삭제하지 않기 때문에 ..

Backend/Database

[DB] 데이터베이스와 SQL

1. DB와 DBMS - 일반적으로 데이터베이스는 DB라 이야기 - 데이터베이스를 효율적으로 관리하는 소프트웨어를 DBMS(Database Management System)라 한다. 2. DBMS와 같은 전용 소프트웨어를 사용하는 이유 1. 생산성 - 시스템 개발 과정에서의 생산성 향상 - 어떤 시스템이든 데이터 검색, 추가, 삭제, 갱신과 같은 처리가 이루어지는데, 이와 같은 기본 기능을 DBMS가 제공한다. 2. 기능성 - DBMS는 데이터베이스를 다루는 기능을 많이 제공 - 복수 유저의 요청에 대응, 대용량의 데이터 저장, 고속으로 검색 등의 기능 - 시스템 확장에 유연하게 대처할 수 있음 3. 신뢰성 - 대규모 데이터베이스는 수많은 요청에 대응할 수 있도록 만들어져 있다. - DBMS는 그 과정에..

Backend/JAVA

[JAVA] Object 클래스와 Object 메소드(equals, hashCode, toString)

클래스를 선언할 때 extends 키워드로 다른 클래스를 상속하지 않으면 암시적으로 java.lang.Object 클래스를 상속한다. 이는, 컴파일러 단에서 자동적으로 이루어진다. 그렇기에, Object가 가진 메소드를 모든 객체에서 사용할 수 있다. 그 종류는 대표적으로 세가지가 있다. boolean equals(Object obj) int hashCode() String toString() 각각 설명해보자 1. boolean equals(Object obj) 객체의 번지를 비교하여 결과를 리턴한다. equals()는 ==은 기본적으로 동일하다. 대게, 메소드를 재정의해서(오버라이딩) 동등 비교로 사용하기도 한다. "동등 비교"란 객체가 달라도 내부의 데이터가 같은지를 비교하는 것을 말한다. 가장 대표..

Backend/JAVA

[JAVA] Servlet 이란?

자바에서 웹 개발을 하다보면 필수 지식인 서블릿에 대해서 이야기 해보자 Servlet = Server + Applet - 서블릿은 자바의 서버기반에서 돌아가는 일종의 프로그램이다. - 개발자가 순수 자바로 서버를 개발한다고 하면, 보통 서블릿 코드를 작성한다. Servlet 코드랑 자바 코드랑 무슨 차이인데? - 일반적인 자바코드는 JVM 위에서 작동 - 하지만, Servlet 코드는 JVM위에 Servlet Container라는 것을 두고 그 Container 안에서 실행된다. - 컨테이너(Container)라 하면 보통, WAS 내에서 돌아간다. - 보통 많이 쓰는 WAS는 Apache사에서 제작한 Tomcat이며, 이 안에는 서블릿 컨테이너가 내장되어 있다. Servlet Class Hierarch..

Backend/JAVA

[JAVA] JAVA 기본 용어 정리

1. JAVA SE(Standard Edition) 말그대로 JAVA SE는 가장 기본, 표준 에디션이다. JAVA 프로그래밍 언어 사용 시 java.lang*, java.io*, java.util* 등 과 같은 기본 패키지가 있다. JDBC나 JSP와 같은 내용이 지원되지 않는 spec이라 서버 개발 시 불편하다. 2. JAVA EE(Enterprise Edition) SE에 비해 보다 확장된 기능을 제공한다. JSP, Servlet, JDBC, Framework 등의 많은 기술을 제공하여 실질적인 자바 웹 서버를 만드는데 도와준다. 3. JAVA Application 실행 단계 자바 어플리케이션은 아래와 같은 과정을 거쳐 실행된다. 1. Test.java(원시 소스코드) - 원시 소스 코드를 생성 -..

기만주
'Backend' 카테고리의 글 목록