전체 글 134

[Springboot] OneToMany VS ManyToOne

Springboot에서 관계는 1:1, 1:N, N:1, N:M 관계가 있다. 이 중 OneToMany는 1:N을, ManyToOne은 N:1을 표현하는 어노테이션이다. 이 두개는 외래키의 위치가 다르며 게시글과 댓글로 예를 들자면 OneToMany는 게시글 안에 댓글을 포함시키는 것이고 외래키는 댓글이 가지게 된다. ManyToOne은 댓글이 하나의 게시글을 참조하는 것(가리키는 것)이며 외래키는 게시글이 가진다. OneToMany 외래키를 N에서 관리하지만 1에서 N쪽을 제어(CRUD)할 수 있기에 헷갈릴 수 있다. 테이블의 특정 레코드 삭제 및 업데이트시 모든 레코드를 확인해야 하는 문제가 발생할 수 있다. 연관관계 관리를 위해 추가로 UPDATE SQL이 실행된다 OneToMany 외래키를 1에서..

Springboot 2023.07.30

[CS] 정규화 및 반정규화

정규화: 잘못 설계된 관계형 스키마를 쪼개어 바람직한 스키마로 만들어 가는 과정 DB 논리적 설계단계에서 수행 수준이 높을수록 유연한 데이터 구축, 정확성 상승, 물리적 접근이 복잡, 조회 성능이 저하 정규화의 목적 : 단순화, 무결성, 안정성 어떠한 릴레이션이라도 DB 내에서 표현 가능 효과적인 검색 알고리즘 생성 가능 중복배제, 저장공간의 최소화 데이터 삽입 시 릴레이션을 재구성할 필요성을 줄임 정규화를 거치지 않을 시 데이터들이 불필요하게 중복되는 현상인 이상(Anomaly)이 발생할 수 있다. 삽입 이상 : 삽입 시 원하지 않은 값들도 함께 삽입되는 현상 삭제 이상 : 삭제 시 상관없는 값들도 함께 삭제되는 현상 갱신 이상 : 갱신 시 일부분만 갱신되어 정보에 모순이 생기는 현상 정규화의 원칙 스..

Springboot 2023.07.29

[WIL] week 6

Fact: 학습내용 이번주는 미니 프로젝트를 진행했다. 로그인 및 회원가입 부분을 담당했으며, RefreshToken을 사용하여 AccessToken을 재발급 하는 기능을 구현했다 Feeling: 느낀 점 1. 처음으로 강의에서 나오지 않은 기능을 찾아보며 직접 만들었기에 무사히 구현됐을 때 성취감이 매우 컸다. 2. 로그인이라는 기능이 이정도로 복잡할 줄은 몰랐다. 3. 기능구현도 쉽지 않았지만, 협업 진행간 크고작은 에러들 때문에 더욱 힘들었다. Finding: 알게 된 것 1. RefreshToken을 통한 AccessToken의 재발급 방법 2. Intellij와 Redis의 연동방법 3. 프로젝트 시작 전 명세의 중요성 3. 팀 프로젝트간 소통과 피드백의 중요성 Future: 알게된 것을 어떻게..

TIL, WIL 2023.07.23

[Springboot] DAO, DTO, VO

DAO DB의 data에 접근하기 위한 객체. DB에 접근 하기 위한 로직 & 비즈니스 로직을 분리하기 위해 사용한다. 직접 DB에 접근하여 data를 삽입, 삭제, 조회 등 조작할 수 있는 기능을 수행한다. DTO 계층 간 데이터 교환을 하기 위해 사용하는 객체. 로직을 가지지 않는 순수한 데이터 객체(getter & setter 만 가진 클래스) VO VO(Value Object) 값 오브젝트로써 값을 위해 쓰임 read-Only DTO와 유사하지만 VO는 getter 기능만 존재한다 DTO와 VO 차이점 DTO는 인스턴스 개념이고 VO는 리터럴 값 개념이다. VO는 값들에 대해 Read-Only를 보장해줘야 존재의 신뢰성이 확보되지만 DTO의 경우는 단지 데이터를 담는 그릇의 역할일 뿐 값은 그저 ..

Springboot 2023.07.18

[Springboot] CORS란?

CORS(Cross Origin Resource Sharing): 도메인이 다른 자원에 리소스를 요청할 때 접근 권한을 부여하는 메커니즘 친구의 물건을 쓰려면 친구가 제한하는 규약안에서 사용해야 하듯, 다른 도메인의 자원을 쓰려면 자원의 주인이 허락한 규약을 지켜야 하는 것이고 이러한 규약을 표준화한 것이 CORS이 여기서 말하는 도메인이란 Resource를 의미하며 프로토콜, 호스트, 포트를 의미한다. (ex. http : 프로토콜, localhost : 호스트, 8080: 포트) 프로토콜 - http와 https 도메인 - domain.com, other-domain.com 포트 번호 - 8080, 7070 위의 3개가 같아야 같은 출처이다. SOP와 CORS 📌 SOP와 CORS에 대해서 설명해주세..

Springboot 2023.07.15

[CS] 스케줄링

스케줄링: 프로세스 실행 시 필요한 여러 자원을 해당 프로세스에게 할당하는 것 스케줄링의 종류 장기 스케줄링 : 어떤 프로세스가 시스템 자원을 할당받을지 결정 후 준비상태 큐로 보냄 작업 스케줄링, 상위 스케줄링이라고도 하며 작업 스케줄러에 의해 수행 중기 스케줄링 : 어떤 프로세스들이 CPU를 할당받을 것인지 결정하는 작업 CPU를 할당받으려는 프로세스들이 많을 시 일시보류 시킨 후 활성화해서 부하 조절 단기 스케줄링 : CPU를 할당받는 시기와 특정 프로세스를 지정하는 작업 프로세서 스케줄링, 하위 스케줄링 이라고도 한다 프로세서 스케줄링 및 문맥교환은 프로세서 스케줄러에 의해 수행됨 문맥교환(Context Switching) : OS에 의해 CPU가 할당되는 프로세스 변경 시 실행 프로세스에 CPU..

CS 2023.07.15

[CS] 병행(Concurrency)과 병렬(Parallel)

공부를 하던 도중, 병행과 병렬의 개념이 헷갈려서 정리해봤다. 병행(Concurrency) 병렬(Parallel) 동시에 실행되는 것 같이 보이는 것 실제로 동시에 여러 작업이 처리되는 것 싱글 코어에서 멀티 쓰레드(Multi thread)를 동작 시키는 방식 멀티 코어에서 멀티 쓰레드(Multi thread)를 동작시키는 방식 한번에 많은 것을 처리 한번에 많은 일을 처리 논리적인 개념 물리적인 개념 병행(Concurrency) 단일 프로세서 또는 단일 코어에서 여러 작업이 시분할 방식으로 조금씩 번갈아가며 실행되는 방식이다. 여러 작업을 번갈아 가며 실행되면서 자원을 최대한 활용하여 작업을 빠르게 완료하는 것이 목표이다. 작업들이 서로에게 영향을 주지 않거나 의존성이 적을 경우 성능 향상을 노릴 수 ..

CS 2023.07.12

[Springboot] Handler, @ExceptionHandler, @ControllerAdvice

Handler 클라이언트로부터의 요청을 처리하고, 해당 요청에 대한 적절한 작업을 수행하는 역할 @Controller와 @RestController를 사용하여 정의한다. 핸들러는 특정 URL에 매핑되고 해당 URL로 요청이 들어오면 실행된다. @ExceptionHandler @ExceptionHandler: @ExceptionHandler를 사용한 handler에서 발생하는 모든 예외를 하나의 메서드로 처리할 수 있다. 아래는 PostController에서 NullPointerException발생 시 nullex 메서드를 호출하는 코드이다. @RestController public class PostController { ... ... @ExceptionHandler(NullPointerException..

Springboot 2023.07.11

[CS] DBMS

DBMS는 DB를 효율적이고 직관적이며 안전하게 사용할 수 있게 해주는 DB ManagerSystem이다 효율성: 중복 제어 및 무결성 제약조건을 정의/검사하는 기능을 가짐 직관성: 서로 다른 데이터 간의 관계를 표현해주는 관계 표현 및 편리한 인터페이스를 제공 안전성: 접근하는 사용자마다 다른 권한을 주어 접근통제 및 데이터 수정/삭제 시 백업 기능 제공 트랜잭션: DB의 상태를 변화시키는 작업 단위나 병행제어 및 회복 작업 시 처리되는 작업의 논리적 단위로 사용된다. 트랜잭션의 특성: ACID - Atomicity(원자성) : 모두 반영(Commit)되거나 전혀 반영되지 않아야 함(Rollback) - Consistency(일관성) : 시스템의 고정요소는 트랜잭션 수행 전, 후의 상태가 같아야 함 -..

CS 2023.07.08