
1부에서는 LogLy가 어떤 프로젝트인지 소개해드렸죠? 이번 편에서는 좀 더 깊이 들어가서 실제로 어떻게 만들었는지 얘기해볼게요!
API 설계하면서 "아, 이렇게 하면 되겠구나!" 싶었던 것들이 많았는데, 그런 것들 위주로 공유해볼게요 😊
API 만들 때 생각한 것들
처음 API 설계할 때 이런 걸 고민했어요:
- 직관적이어야 한다: URL만 봐도 뭐 하는 건지 알 수 있게
- 보안은 필수: 내 노트 남이 못 보게 JWT로 잠궈놓기
- 에러 메시지는 친절하게: 뭐가 문제인지 바로 알 수 있게
- 일관성: 응답 형식이 통일되면 프론트 만들기 편하더라고요
그럼 이제 실제 API들을 하나씩 살펴볼까요?
1. 회원가입하고 로그인하기 (/api/auth)

아이디 중복 체크부터!
회원가입하기 전에 아이디 쓸 수 있는지 확인해야죠?
GET /api/auth/check-username?username=coolguy123
이렇게 보내면...
{
"available": true // 쓸 수 있어요!
}
회원가입 고고!
POST /api/auth/register
Content-Type: application/json
{
"username": "coolguy123",
"password": "mysecretpassword"
}
성공하면 이렇게 와요:
{
"message": "회원가입이 완료되었습니다."
}
간단하죠? ㅎㅎ
로그인은 더 간단!

POST /api/auth/login
Content-Type: application/json
{
"username": "coolguy123",
"password": "mysecretpassword"
}
그러면 토큰을 줘요:
{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}
이 토큰이 중요해요! 이제부터 모든 요청에 이걸 붙여서 보내야 해요.
Authorization: Bearer {토큰} 이런 식으로요!
2. 내 정보 관리하기 (/api/user)
이름 바꾸고 싶을 때
PUT /api/user/me
Authorization: Bearer {토큰}
Content-Type: application/json
{
"username": "newcoolguy"
}
이름을 바꾸면 새 토큰을 줘요. 그거 다시 저장하는 거 잊지 마세요!
탈퇴하고 싶을 때 😢
DELETE /api/user/me
Authorization: Bearer {토큰}
주의! 이거 누르면 다 날아가요. 노트, 프로젝트, 템플릿 전부요. 진짜 확실할 때만 누르세요!
3. 프로젝트로 노트 정리하기 (/api/projects)

내 프로젝트 목록 보기
GET /api/projects
Authorization: Bearer {토큰}
이렇게 오죠:
[
{
"id": 1,
"name": "개인 공부",
"user": {
"id": 1,
"username": "coolguy123",
"email": "cool@example.com",
"provider": "local"
}
},
{
"id": 2,
"name": "회사 업무",
"user": { ... }
}
]
새 프로젝트 만들기
POST /api/projects
Authorization: Bearer {토큰}
Content-Type: application/json
{
"name": "사이드 프로젝트"
}
프로젝트 지우기
DELETE /api/projects/1
Authorization: Bearer {토큰}
참고: 프로젝트 지워도 노트는 안 지워져요! 노트들은 '미분류'로 이동해요. 안심하세요 😊
4. 노트 쓰기! (/api/entries)
여기가 제일 중요한 부분이에요!

노트 하나 작성하기
파일도 첨부할 수 있어서 multipart/form-data로 보내야 해요.
POST /api/entries
Authorization: Bearer {토큰}
Content-Type: multipart/form-data
entry: {
"title": "오늘 배운 것",
"content": "<p>Spring Boot 재미있다!</p>",
"researcher": "나",
"tags": ["개발", "공부"]
}
projectId: 1
file: [파일 선택]
내 노트 보기
전체 노트:
GET /api/entries?projectId=all
프로젝트별로 보기:
GET /api/entries?projectId=1
정리 안 된 노트들:
GET /api/entries?projectId=uncategorized
검색하기:
GET /api/entries?search=Spring
검색하면 제목, 내용, 작성자, 태그 전부 다 찾아줘요!
노트 자세히 보기
GET /api/entries/5
Authorization: Bearer {토큰}
노트 수정하기
PUT /api/entries/5
Authorization: Bearer {토큰}
Content-Type: multipart/form-data
entry: {
"title": "오늘 배운 것 (수정)",
"content": "<p>React도 재미있다!</p>",
"researcher": "나",
"tags": ["개발", "완료"]
}
projectId: 2
file: [새 파일]
꿀팁: 수정하면 이전 버전이 자동으로 저장돼요! 나중에 복구할 수 있어요 👍
노트 지우기
DELETE /api/entries/5
Authorization: Bearer {토큰}
에디터에 이미지 넣기
글 쓰다가 이미지 바로 넣고 싶을 때:
POST /api/entries/images
Authorization: Bearer {토큰}
Content-Type: multipart/form-data
image: [이미지 파일]
그러면 URL을 줘요:
{
"url": "/uploads/images/abc123.jpg"
}
이걸 에디터에 넣으면 끝!
5. 실수해도 괜찮아! 버전 관리 기능
이거 만들면서 제일 뿌듯했어요 ㅎㅎ

이전 버전들 보기
GET /api/entries/5/versions
Authorization: Bearer {토큰}
이렇게 나와요:
[
{
"id": 1,
"title": "첫 번째 버전",
"content": "<p>처음 쓴 내용</p>",
"researcher": "나",
"tags": ["개발"],
"versionTimestamp": "2024-01-15T10:30:00"
},
{
"id": 2,
"title": "두 번째 버전",
"content": "<p>수정한 내용</p>",
"researcher": "나",
"tags": ["개발", "수정"],
"versionTimestamp": "2024-01-16T14:20:00"
}
]
예전 버전으로 되돌리기
POST /api/entries/5/versions/1/restore
Authorization: Bearer {토큰}
안심 포인트: 복구하기 전에 지금 상태도 버전으로 저장해요. 완전 안전!
6. 템플릿으로 편하게! (/api/templates)
똑같은 형식을 계속 쓸 때 편해요.
내 템플릿 보기
GET /api/templates
Authorization: Bearer {토큰}
템플릿 만들기
POST /api/templates
Authorization: Bearer {토큰}
Content-Type: application/json
{
"name": "회의록",
"content": "<h1>회의록</h1><p>날짜: </p><p>참석자: </p><p>안건: </p>"
}
템플릿 지우기
DELETE /api/templates/1
Authorization: Bearer {토큰}
만들면서 배운 것들 📚
JWT는 편한데 조심해야 해요
JWT는 서버에 저장 안 해도 돼서 좋은데, 클라이언트에서 잘 관리해야 해요. 지금은 LocalStorage에 저장했는데, 나중에 보안 강화하려면 HttpOnly 쿠키 쓰는 게 나을 것 같아요.
파일 업로드는 생각보다 간단!
처음엔 복잡할 줄 알았는데, Spring Boot의 @RequestPart 쓰니까 생각보다 쉽더라고요. JSON이랑 파일을 같이 보내는 것도 어렵지 않았어요!
버전 관리는 데이터베이스 설계가 중요!
처음엔 어떻게 만들지 고민 많이 했어요. 결국 EntryVersion 테이블을 따로 만들었는데, 나중에 보니 이게 정답이더라고요.
검색 기능, 생각보다 중요해요
노트가 많아지니까 검색이 진짜 필요하더라고요. 지금은 데이터베이스에서 바로 검색하는데, 나중에 Elasticsearch 같은 거 써보고 싶어요.
이제 뭘 만들까요? 🚀
LogLy 만들면서 정말 많이 배웠어요. 이제 추가하고 싶은 기능들:
- 🔍 더 강력한 검색: Elasticsearch 도입해보기
- 📱 모바일 최적화: 핸드폰에서도 편하게
- 🤝 공유 기능: 친구들이랑 노트 같이 보기
- 🎨 다크모드: 눈 편하게!
- 📊 대시보드: 내가 얼마나 열심히 쓰는지 보기
- 🔔 알림 기능: 중요한 노트 놓치지 않게
혹시 "이런 기능도 있으면 좋겠어요!" 하는 게 있으면 댓글로 알려주세요! 🙏
마무리하며
긴 글 읽어주셔서 정말 감사해요! 😊
처음에는 "그냥 메모장 하나 만들자" 했는데, 하다 보니까 이것저것 넣고 싶어져서 여기까지 왔네요 ㅎㅎ
코드가 궁금하신 분들은 댓글 남겨주세요. GitHub에 올릴지 고민 중이에요!
다음에는 프론트엔드 개발기도 한번 써볼게요. React로 UI 만드는 것도 재미있더라고요!
그럼 다음에 또 만나요! 👋
'Project > 사이드 프로젝트' 카테고리의 다른 글
| LogLy 프로젝트 개발일지 - 1부: 프로젝트 소개 및 기술 스택 (0) | 2025.11.09 |
|---|










































