전체 글 205

[RPM] ERD 변경

ERD가 변경되었다. 내가 없는 사이 팀원이 ERD를 다시 구상하였다고한다. 우선, 우리가 초기 구성한 ERD를 살펴보자. 우리가 이 ERD를 구상하면서 가장 고민이 되었던 부분이 바로 old_XX 엔티티이다. old_XX 엔티티를 만든 이유는 사용자에게 과거 사진 교환 목록을 제공하기 위함이다. sending과 matching에 과거 사진 교환이 성공한 이력을 저장하고자 하였지만 테이블이 누적되는 것도, status를 갖고 있어야하는 것도 조금 걸렸다. 그래서 완료된 데이터를 저장하는 테이블과 진행 중인 테이블을 분리하였는데.. 위와 같은 erd에서는 user_id가 주어졌을 때, 사진 교환 이력을 불러오는데 다음과 같은 복잡한 과정을 거친다. user_id 기반으로 old_sending_id를 찾는다..

[RPM] ERD 구상하기

현재까지 고안해낸 ERD이다. 내가 작성하는 방식과는 다르지만, 이것도 꽤나 잘 눈에 들어오는 것 같아서 좋은 것 같다. 우선 User가 존재한다. 회원가입을 할 예정이며 소셜 로그인같은 기능보다는 간단한 아이디, 패스워드로 시작해보려고 한다. User는 Sending이라는 행위를 한다. 사진을 매칭할 대상을 찾는 과정인 것이다. 서버 내부에서 real time algorithm으로 인해 서로 사진을 주고받은 User 두 명이 검색되었다면, Sending 2개의 데이터가 묶여 Matching에 등록된다. Matching에 등록된 데이터들은 서로 사진을 교환하는 과정을 거친다. 이러한 일련의 과정(사진 교환)을 거치게 되면 matching과 sending에서 앞선 처리된 상황의 데이터가 삭제되고 old_X..

[RPM] 프로젝트 개요

Random Photo Matcher라는 이름의 RPM. 과거 팀원의 경험을 떠올려 기억에 남았던 어플의 핵심 기능을 가져와서 우리만의 서비스로 만들어 보려고 한다. Rando. 랜덤으로 사진을 교환하는 서비스이다. 현재는 서비스를 중단하였다고 한다. 우리는 이러한 핵심 기능을 구현하고 그로부터 필요한 부가기능을 넣어서 4월 한달동안 구상해보려고 한다. 화이팅..!! 새로운 마음으로.

[이펙티브 자바] 적시에 방어적 복사본을 만들라 (Item. 50)

방어적으로 프로그래밍하라 항상 우리는 클라이언트가 우리의 불변식을 깨뜨리려고 혈안이 되어 있다고 가정하고 방어적으로 프로그래밍해야 한다. 아래와 같은 클래스를 불변식으로 만들려고 의도하고 코드를 작성하였다고 해보자. 위 클래스는 불변인가? 그렇지 않다. 기본적으로 final은 기본형인 int와 같은 타입은 변경이 불가능하도록 한다. 하지만 Date와 같은 가변 클래스는 변경이 가능하게 된다. 그 말인 즉슨 Date를 final로 선언하여도 Date 내부의 값을 변경할 수 있다는 뜻이다. 이러한 이유로 Date보다는 자바 8 이후에 등장한 Java.time.Instant나, LocalDateTIme과 같은 불변으로 정의된 클래스를 사용하는 것이 좋다. 하지만 현재 위 코드의 상태로 클라이언트로부터 Peri..

Java 2024.03.21

[이펙티브 자바] 매개변수가 유효한지 검사하라. (Item 49)

원칙 1. 오류는 가능한 한 빨리 잡아야 한다 메서드와 생성자의 매개변수는 대게 어떤 조건을 만족하기를 바란다. 예를 들면, 파라미터로 들어오는 인덱스의 값은 음수이면 안된다거나, 주민등록번호는 13자리인 것처럼 말이다. 이러한 제약은 문서화해야하며, 메서드 몸체가 시작되기 전에 검사해야한다. 만약 그러지 않고 오류를 발생한 즉시 잡지 못했다면, 오류를 감지하기 어려워지고, 발생 지점을 찾기 힘들어진다. 매개변수 검사를 제대로 하지 않았을 때 파라미터의 조건을 만족하지 못하게 되면 실패 원자성을 어기는 결과를 초래할 수 있다. 실패 원자성이란, 호출된 메서드가 실패하더라도 해당 객체는 메서드 호출 전 상태를 유지해야하는 성질을 말한다. 이렇게 매개변수를 제대로 하지 못하면 아래와 같은 상황이 벌어질 수 ..

Java 2024.02.27

모각코 6회차(240206)

[백준/BOJ] 1976번 여행 가자 (자바/Java) https://www.acmicpc.net/problem/1976 1976번: 여행 가자 동혁이는 친구들과 함께 여행을 가려고 한다. 한국에는 도시가 N개 있고 임의의 두 도시 사이에 길이 있을 수도, 없을 수도 있다. 동혁이의 여행 일정이 주어졌을 때, 이 여행 경로가 가능한 것인 www.acmicpc.net 1. 문제 동혁이는 친구들과 함께 여행을 가려고 한다. 한국에는 도시가 N개 있고 임의의 두 도시 사이에 길이 있을 수도, 없을 수도 있다. 동혁이의 여행 일정이 주어졌을 때, 이 여행 경로가 가능한 것인지 알아보자. 물론 중간에 다른 도시를 경유해서 여행을 할 수도 있다. 예를 들어 도시가 5개 있고, A-B, B-C, A-D, B-D, E..

모각코 2024.02.18

모각코 5회차(240201)

[백준/BOJ] 1253번 좋다 (자바/Java) https://www.acmicpc.net/problem/1253 1253번: 좋다 첫째 줄에는 수의 개수 N(1 ≤ N ≤ 2,000), 두 번째 줄에는 i번째 수를 나타내는 Ai가 N개 주어진다. (|Ai| ≤ 1,000,000,000, Ai는 정수) www.acmicpc.net 1. 문제 N개의 수 중에서 어떤 수가 다른 수 두 개의 합으로 나타낼 수 있다면 그 수를 “좋다(GOOD)”고 한다. N개의 수가 주어지면 그 중에서 좋은 수의 개수는 몇 개인지 출력하라. 수의 위치가 다르면 값이 같아도 다른 수이다. 입력 첫째 줄에는 수의 개수 N(1 ≤ N ≤ 2,000), 두 번째 줄에는 i번째 수를 나타내는 Ai가 N개 주어진다. (|Ai| ≤ 1,..

모각코 2024.02.17

[혼공SQL] 혼공단 11기 활동 회고

안녕하세요!!! 혼공학습단 11기에서 활동한 신경준입니다. 우와.. 뭔가 신청을 12월달에 했던 것 같은데 벌써 2달이 흐르고 6주의 미션을 거쳐서 완주한 것에 큰 뿌듯함이 있으면서도 한편에서는 더 열심히 하지 못한 아쉬움도 남아있지만.. 족장님께서 후회보다는 좋았던 점 위주로 써보라고 하셔서 써볼까 합니다..!! 저는 이제 막 졸업을 앞두고 있어요..! 학교생활할 때는 나름 부지런하게 수업도 다니고, 수업이 끝나면 도서관에서 공부도 하면서 규칙적인 생활을 했는데, 이제 방학이고 본가에 내려오다보니까 정말 오랜만에 느껴보는 자유...?? 가 너무 달콤해서인지 늦잠도 맨날 자고 수면패턴도 달라지도 완전 난리도 아니였어요.. 뭔가 크게 한번 다짐해도 일주일 후면 다시 늘어지기 마련이고.. 뭔가 속으로는 '그..

기타 2024.02.17

[혼공SQL] 혼공단 11기 - 6주차 미션 인증

우와.. 진짜 마지막 주차를 진행하게 되었네요... 뭔가 처음에는 엄청 열심히 막 화요일에 끝내버리고 이런 느낌이었는데 시간이 갈수록 마감기한에 촉박하게 제출했던 기억이 남습니다... 이번주에는 정보처리기사 필기도 응시해서 당.당.히 합격했습니다!!(정처기가 당일처리기사라고 불릴만큼 쉽다지만요...하핫) 무튼 그렇게 이런저런 연휴도 보내면서 하다보니, 뭔가 많은 양은 아니었는데, 오랫동안 미뤄뒀었네요... 파이썬과 연결하여 진행하는 실습은 개념 부분이 아니라 따로 정리하지 않았고, 그 외의 7단원은 정리한 글 공유합니다! 2024.02.05 - [CS/DB] - [혼공SQL] 스토어드 프로시저 2024.02.07 - [CS/DB] - [혼공SQL] 스토어드 함수 2024.02.07 - [CS/DB] - ..

CS/DB 2024.02.17

[혼공SQL] 트리거

트리거 트리거는 테이블에서 DML문(INSERT, UPDATE, DELETE 등)의 이벤트가 발생할 때 자동으로 작동하는 기능을 말한다. 이는 테이블에 미리 부착되어 있다. 트리거는 어떤 DB에서 데이터를 삭제할 때, 해당 데이터를 완전히 삭제하는 것이 아닌, 과거 내역을 저장하는 histroy_DB에 저장하는 등의 행동을 할 때, 사람이 직접 하게 되면 이를 놓치거나 잘못 입력하여 다르게 작동시킬 수 있다. 트리거는 한번 선언하여 테이블에 붙여둠으로써 이를 해결하고 자동화하여 편리함을 제공한다. 트리거의 사용 트리거는 아래의 SQL문과 같이 사용이 가능하다. 스토어드 프로시저와 비슷하지만 조금 다른 부분이 존재하며, 아래와 같은 형식이 쓰이니 익혀두는 것을 추천한다. DELIMITER $$ CREATE..

CS/DB 2024.02.09