2025/06 21

멋쟁이사자처럼 여기톤 대비 토이 프로젝트 후기

6월 13일을 끝으로 약 3주간 걸친 여기톤 대비 토이 프로젝트가 끝이 났다. 원래는 끝나자마자 적으려고 했는데, 생각보다 많은 일을 맡게 된 관계로... 회복하는 데에 시간이 조금 많이 걸렸다. (사실 프젝 하나 할 때마다 며칠은 골골댄다) 그동안 나름 많은 팀 프로젝트를 해왔었다. 안드로이드 애플리케이션 두 개를 프론트로 개발하고 유니티로 게임 개발도 해보았는데, 언제나 나를 가장 힘들게 했던 부분이 소통이었다. 특히 백과 프론트가 별도로 존재하면 어디까지 프론트가 개발하고 어디까지 백이 개발할 것인지, 명세서를 언제 넘겨줄 것인지 등을 회의하고 전체 개발 일정을 조율하는 등 정말 많은 이야기를 해야했다. 이전 팀프로젝트 때 전체 팀장을 맡았는데, 백 한 명이 자신이 맡은 부분을 하지도 않고 잠수를 ..

[멋사/Mac OS] 5주차 정기 세션 (Part 4. 영속성 전이 ~ Part 6. Auditing)

4. 영속성 전이(1) 영속성 전이- 영속성 전이 : 엔티티의 상태를 변경할 때 해당 엔티티와 연관된 엔티티의 상태 변화를 전파해주는 기능- 부모 엔티티 상태 변경 -> 자식 엔티티 상태 자동 변경 영속성 전이 조건1. 자식 엔티티가 독립적으로 존재하지 않고 부모 엔티티에 완전히 의존적일 때2. 부모가 저장되면 자식도 같이 저장, 부모가 삭제되면 자식도 같이 삭제 (유사한 라이프 사이클)(2) Cascade- Cascade: 부모 엔티티의 상태 변화가 자식 엔티티에도 자동으로 전파 (부모의 생명주기에 자식도 함께 묶음)PERSISTREMOVEMERGEREFRESHALL부모 저장 시 자식 저장부모 삭제 시 자식 삭제부모 변경 시 자식 변경부모 새로고침 시 자식도 새로고침모든 옵션 포함 - 예시 코드@Ent..

[멋사/Mac OS] 5주차 정기 세션 (Part 3. QueryDSL 소개 및 JPQL과 비교)

3. QueryDSL 소개 및 JPQL과 비교(1) JPQL의 단점- 오타나 문법 오류를 컴파일 시에 찾을 수 없음-> 실행 전까지 오류 발견이 불가능-> 개발 중 오류 발견이 어렵고, 실행 중 예외 발생 - 동적 쿼리 작성이 불편-> if문이 많아질수록 가독성이 나빠짐(2) QueryDSL의 장점- 타입 안전성 보장-> 컴파일 시점에 username이 String 타입인지 확인 가능-> 오타가 있으면 바로 에러가 발생하여 실행 전에 오류를 방지 - 동적 쿼리 작성이 간편-> BooleanBuilder를 사용해서 조건을 유동적으로 추가 가능-> if문을 최소화하고 가독성을 높임 JPQLQueryDSL문법문자열 기반코드 기반타입 체크런타임 오류 가능컴파일 시 오류 잡힘동적 쿼리어렵고 복잡유연하고 깔끔ID..

[멋사/Mac OS] 5주차 정기 세션 (Part 2. JPA 쿼리 작성 방법)

2. JPA 쿼리 작성 방법(1) JPQL과 쿼리- JPQL : JPA 전용 객체 지향 쿼리 언어, SQL과 유사하지만 엔티티 중심으로 작성SELECT e FROM EntityName e WHERE e.property = :value -> SQL과 비슷하지만 엔티티 기준으로 작성-> 테이블 이름이 아닌 클래스 이름과 필드명을 사용-> DB 독립적인 쿼리라 이식성이 좋음-> 복잡한 조건도 표현이 가능해서 유연성이 높음 - @Query : JPQL을 써먹을 수 있게 해주는 도구@Query("SELECT m FROM Member m WHERE m.age > :age")List findOlderThan(@Param("age") int age); -> 복잡한 조건, 동적 쿼리, 조인 등 자유도가 높을 때 사용->..

[멋사/Mac OS] 5주차 정기 세션 (Part 1. 실습환경 세팅)

1. 실습환경 세팅(1) DB 생성- likelionmember 데이터베이스 및 member 테이블 생성CREATE TABLES `member` ( id int auto_increment primary key, username varchar(10) not null, age int, university varchar(50));(2) SpringBoot 프로젝트 설정- application.propertiesspring.apllication.name = likelionmemberspring.datasource.driver-class-name = com.mysql.cj.jdbc.Driverspring.datasource.url = ${DB_URL}spring.datasource.usern..

[멋사/Mac OS] 4주차 정기 세션 (Part 3. 실습)

3. 실습(1) DTO (Data Transfer Object)- 계층 간 데이터 교환을 위해 사용하는 객체- 불필요한 의존성을 방지하고, 비즈니스 로직을 보호하기 위해 사용-> 프론트가 DTO로 데이터를 넣어주면, 백은 그 DTO 데이터를 엔티티에 넣어서 저장함.-> 백이 엔티티에서 DTO로 데이터를 넣어주고 json으로 프론트한테 보내줄 수 있음-> 필요한 데이터만 깔끔하게 전달 가능-> 민감 정보 노출 문제 해결-> 엔티티와 DTO는 1:1 대응하거나 일부만 대응.-> 엔티티는 DB용, DTO는 네트워크/계층 간 데이터 전달용-> 엔티티와 DTO는 변환 로직을 통해 연결됨 - MemberFormDto 생성package com.likelion13th.shop.dto;import jakarta.vali..

[멋사/Mac OS] 4주차 정기 세션 (Part 2. 엔티티 설계)

2. 엔티티 설계(1) MySQL 접속하기mysql -u root -p -u root : 사용자 이름이 rootroot 계정은 MySQL에서 최고 권한을 가진 관리자 계정.- 데이터베이스 생성/삭제- 사용자 계정 추가/삭제- 권한 부여/회수- 모든 테이블과 데이터에 접근 가능 -p: 비밀번호 입력만일 비밀번호가 없다면 엔터를 누르면 된다.(2) 데이터베이스 생성하기CREATE DATABASE shop;SHOW DATABASES; (3) application.properties 파일 코드 작성spring.application.name=shopspring.datasource.driver-class-name=com.mysql.cj.jdbc.Driverspring.datasource.url=jdbc:mysql:..

[멋사/Mac OS] 4주차 정기 세션 (Part 1. JPA)

1. JPA(1) JPA란?- JAVA에서 ORM기술을 제공하는 표준 인터페이스- ORM: 객체로 연결, 객체와 테이블을 자동으로 매핑시켜 RDB 테이블을 객체지향적으로 사용할 수 있도록 해줌- 어플리케이션과 데이터베이스 연결 시 SQL 언어가 아닌 어플리케이션 개발 언어로 데이터베이스를 접근할 수 있게 함장점단점DBMS에 대한 종속성 감속복잡한 쿼리 처리가 어려움객체지향적 프로그래밍성능 저하의 위험생산성 향상학습 비용 발생재사용, 유지 보수 용이 (2) 영속성 컨텍스트- 영속성: 데이터들이 프로그램이 종료되어도 사라지지 않고 어떤 곳에 저장되는 개념 (캐시같은 건가...?)- 영속성 컨텍스트: 데이터를 영구 저장하는 환경으로 애플리케이션과 DB 사이 객체를 보관하는 가상의 DB. (논리적 개념)- En..

[멋사/Mac OS] 3주차 정기 세션 (Part 3. 데이터베이스 기초 및 설계)

1. 데이터 유형(1) 숫자형- INT, DOUBLE(2) 문자형- CHAR, VARCHAR (CHAR: 고정 길이, VARCHAR: 가변 길이)(3) 날짜 및 시간 타입- DATE, DATETIME, TIMESTAMP 2. 컬럼의 속성- Primary key (PK) : 각 행을 식별하는 데 사용되는 고유한 식별자- Foreign key (FK) : 다른 테이블의 기본 키와 관계를 나타내는 컬럼- Unique : 중복된 값을 허용하지 않음- Not NULL : NULL 값을 허용하지 않음- default : 자동으로 할당되는 값 *데이터 무결성 : 데이터의 정확성, 일관성, 유효성이 유지되는 것을 보장 3. SQL(1) SQL의 주요 분류분류이름역할예시DDLData Definition Language데..

[멋사/Mac OS] 3주차 정기 세션 (Part 2. MVC 패턴)

1. MVC 패턴- 스프링 부트에서 사용하는 디자인 패턴ModelViewController웹 브라우저 상에서 보여주고 싶은 데이터를 저장하는 공간. 데이터베이스에서 정보를 가져옴웹 브라우저에서 보여지는 화면사용자 요청을 처리하고 요청에 대한 처리 로직 담당controllerdomainrepositoryservicedto- 클라이언트로부터 요청을 받고, 해당 요청에 대한 처리를 수행- HTTP 요청 처리- GET, POST, PUT, DELETE 등의 메소드를 가짐- 애플리케이션의 도메인 모델- 데이터베이스와 상호작용 (데이터를 읽고 쓰는 작업)- CURD- Spring Data JPA 제공- 비즈니스 로직 수행 담당- 트랜잭션 관리- 예외 처림- repository로부터 데이터를 가져와 처리- 데이터 전..