Flyway를 통한 데이터베이스 마이그레이션을 알아보자
·
서버
들어가면서안녕하세요. 요즘에 플러피(fluffy)라는 온라인 시험 문제 제작 및 관리 서비스를 만들고 있습니다.플러피에서는 시험 문제를 만들 때 지시문과 선택지만을 작성할 수 있었습니다.문제를 표현하기에 한계가 있어 지문을 추가해달라는 피드백이 있었습니다. 지문을 추가한 시험 문제현재 서비스는 배포 중인 상태이고 데이터가 이미 존재하기 때문에 데이터베이스 스키마를 모두 지우고 새로 생성하는 방법은 사용할 수 없습니다. 간단하게 떠올린 방법은 데이터베이스에 직접 들어간 후 질문 테이블에 지문 컬럼을 추가하는 방법이 있습니다. 다음과 같이 SQL 문을 실행하면 됩니다.ALTER TABLE 질문 ADD COLUMN 지문 TEXT NOT NULL DEFAULT ''; 하지만 이 방법은 데이터베이스에 직접 접근해..
CSS로 최대 라인 수와 최소 라인 수를 고정하는 방법을 알아보자
·
웹 프론트엔드
들어가면서안녕하세요. 요즘에 플러피(fluffy)라는 온라인 시험 문제 제작 및 관리 서비스를 만들고 있습니다. 이 서비스에는 시험 목록을 보여주는 부분이 많습니다. 시험 목록에는 아래와 같은 카드가 존재하고, 여기에 시험을 설명하는 글이 들어갑니다. 시험 설명 글의 줄 수에 따라 카드의 높이가 달라지게 됩니다. 저는 카드마다 높이가 다른 것은 일관성이 없어 보기가 불편했습니다.이러한 이유로 시험 설명의 최대 라인 수와 최소 라인 수를 고정해보았습니다.최대 라인 수 고정먼저, 최대 라인 수를 고정하는 법을 알아보겠습니다.이 속성을 적용할 경우, 줄 수는 최대 3줄까지 늘어나고, 그것을 넘어가면 "..."으로 처리하게 됩니다.{ overflow: hidden; // 넘치는 부분을 숨김 displ..
2024년 회고 - 서버 개발과 우아한테크코스
·
회고
들어가며저에게 2024년은 새로운 시작이었습니다. 이전까지의 저는 프론트엔드를 주로 공부했고, 우아한테크코스를 통해서 백엔드를 본격적으로 공부하기 시작했습니다. 우아한테크코스는 2월부터 11월까지 약 10개월간 진행되었고, 2024년 회고에 이 내용이 빠질 수 없을 만큼 길고 의미가 있었던 시간이었습니다. 이 글에서는 2024년 이전의 나, 우아한테크코스, 그리고 앞으로의 계획에 대해서 이야기해보려 합니다.2024년 이전저는 대학교 1학년까지 학교 공부만 했고, 본격적인 개발을 해본 적이 없었습니다. 1학년을 마치고 난 후 군대에 갔고, 전역이 다가올 때쯤 막막해지기 시작했습니다. Django, Vue, React, NestJS, Android 등 다양한 분야를 공부했고, 구현한 것들을 바로바로 확인할 ..
@JsonTypeInfo와 @JsonSubTypes를 활용하여 요청 데이터에 다형성을 적용해 보자
·
서버
들어가면서안녕하세요. 요즘에 플러피(fluffy)라는 온라인 시험 문제 제작 및 관리 서비스를 만들고 있습니다.플러피에서는 단답형, 서술형, 객관식 단일 선택, 객관식 복수 선택, True/False 등 다양한 문제 유형을 지원하고 있습니다. 이에 따라 요청 데이터에도 다양한 형태의 문제 데이터를 받아야 합니다.예를 들어, 단답형 문제와 객관식 단일 선택의 경우 질문은 동일하게 필요하지만, 옵션 여부나 정답 형태가 다릅니다. 다음의 코드를 참고해주세요.// 단답형 문제 요청 데이터{ "text": "1 + 1 = ?", "type": "SHORT_ANSWER", "correctAnswer": "2"}// 객관식 단일 선택 문제 요청 데이터{ "text": "1 + 1 = ?", "type": "..
Spring JPA를 사용할 때, OneToMany에서 Fetch Join 사용 시 문제점을 알아보자
·
서버
중복 문제Post와 Comment가 일대다(1:N) 관계이고, Post에서 @OneToMany로 Comment를 참조하고 있다.@Entity@NoArgsConstructor(access = lombok.AccessLevel.PROTECTED)@Getterpublic class Post { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @OneToMany(mappedBy = "post") private List comments;}@Entity@NoArgsConstructor(access = lombok.AccessLevel.PROTECTED)@Getterpublic class Comment { ..
Spring JPA를 사용할 때 findByXxxId의 문제점을 알아보자
·
서버
문제 상황Post와 Comment가 일대다(1:N) 관계이고, Comment에서 @ManyToOne로 Post를 참조하고 있다.@Entity@NoArgsConstructor(access = AccessLevel.PROTECTED)@Getterpublic class Post { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id;}@Entity@NoArgsConstructor(access = AccessLevel.PROTECTED)@Getterpublic class Comment { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private L..