{"info":{"_postman_id":"2bbac587-fd8d-4075-82e6-56e507081789","name":"Schedule - 일정 관리 앱(API 명세서)","description":"<html><head></head><body><h2 id=\"프로젝트-개요\">프로젝트 개요</h2>\n<h3 id=\"일정-등록-및-관리\">일정 등록 및 관리</h3>\n<p>일정의 제목, 내용 등을 등록하고 수정/삭제할 수 있습니다.</p>\n<h3 id=\"🗄️data\">🗄️DATA</h3>\n<ul>\n<li><p>ID | <code>id</code> : 하나의 일정이 갖는 고유 ID. 일정 등록 시 생성됩니다.</p>\n</li>\n<li><p>제목 | <code>title</code> : 일정의 제목</p>\n</li>\n<li><p>내용 | <code>content</code> : 일정에 관한 설명, 메모 등</p>\n</li>\n<li><p>작성자명 | <code>registrant</code> : 일정을 등록한 등록자 성함</p>\n</li>\n<li><p>비밀번호 | <code>password</code> : 일정 등록 시 입력받는 비밀번호. 일정을 수정/삭제할 때 검증 과정에 사용됩니다.</p>\n</li>\n<li><p>작성일 | <code>createdAt</code> : 일정을 등록한 일시. 일정 등록 시 자동 생성됩니다.(변경 불가)</p>\n</li>\n<li><p>수정일 | <code>modifiedAt</code> : 일정을 가장 최근에 수정한 일시. (수정이 없었을 경우 작성일과 동일)</p>\n</li>\n</ul>\n<h3 id=\"json-정의--응답-방식\">JSON 정의 / 응답 방식</h3>\n<h4 id=\"json-정의\">JSON 정의</h4>\n<ul>\n<li><code>Request</code> POST</li>\n</ul>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"title\": \n    \"content\": \n    \"registrant\":\n    \"password\":\n}\n\n</code></pre>\n<ul>\n<li><code>Request</code> PUT</li>\n</ul>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"title\": \n    \"registrant\":\n    \"password\": \n}\n\n</code></pre>\n<ul>\n<li><code>Request</code> DELETE</li>\n</ul>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"password\":\n}\n\n</code></pre>\n<h4 id=\"응답-방식\">응답 방식</h4>\n<p>성공/실패 여부는 HTTP 상태코드를 통해 제공됩니다.</p>\n<ul>\n<li><p>200번대 : 성공</p>\n</li>\n<li><p>300번대 : 리다이렉션</p>\n</li>\n<li><p>400번대 : 클라이언트 에러 응답</p>\n</li>\n<li><p>500번대 : 서버 에러 응답</p>\n</li>\n</ul>\n<p>상태코드 상세 <a href=\"https://developer.mozilla.org/ko/docs/Web/HTTP/Reference/Status\">참조</a></p>\n<h3 id=\"api-path\">API Path</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th><strong>기능</strong></th>\n<th><strong>HTTP Method</strong></th>\n<th><strong>API Path</strong></th>\n<th><strong>Input Variables</strong></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>일정 등록 <code>save</code></td>\n<td>POST</td>\n<td>/schedules</td>\n<td>title,  <br>content,  <br>registrant,  <br>password</td>\n</tr>\n<tr>\n<td>전체 일정 조회 <code>getAll</code></td>\n<td>GET</td>\n<td>/schedules</td>\n<td>-</td>\n</tr>\n<tr>\n<td>작성자별 일정 조회 <code>getByRegistrant</code></td>\n<td>GET</td>\n<td>/schedules/register/{registrant}</td>\n<td>-</td>\n</tr>\n<tr>\n<td>단 건 조회(Id) <code>getOne</code></td>\n<td>GET</td>\n<td>/schedules/{id}</td>\n<td>-</td>\n</tr>\n<tr>\n<td>일정 수정 <code>update</code></td>\n<td>PUT</td>\n<td>/schedules/{id}</td>\n<td>title,  <br>registrant,  <br>password</td>\n</tr>\n<tr>\n<td>일정 삭제 <code>delete</code></td>\n<td>DELETE</td>\n<td>/schedules/{id}</td>\n<td>password</td>\n</tr>\n</tbody>\n</table>\n</div></body></html>","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","toc":[],"owner":"48172004","collectionId":"2bbac587-fd8d-4075-82e6-56e507081789","publishedId":"2sB3QQHSq3","public":true,"customColor":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"FF6C37"},"publishDate":"2025-10-17T11:30:17.000Z"},"item":[{"name":"전체 일정 조회","event":[{"listen":"test","script":{"id":"60bea227-93c0-4fff-b00f-98275d63b1c9","exec":["pm.test(\"Status code is 200\", function () {","    pm.response.to.have.status(200);","});"],"type":"text/javascript","packages":{},"requests":{}}}],"id":"74d9c2f5-8f21-42e5-8c43-e3ac9b49392f","request":{"method":"GET","header":[],"url":"http://localhost:8080/schedules","description":"<p>등록된 전체 일정을 조회하는 GET request입니다.</p>\n<ul>\n<li>조회 성공 시 <code>200 OK</code> 응답을 받습니다.</li>\n</ul>\n","urlObject":{"protocol":"http","port":"8080","path":["schedules"],"host":["localhost"],"query":[],"variable":[]}},"response":[{"id":"d792ffd2-f98b-4df7-9c30-89d4a03d24c2","name":"GetAllExample","originalRequest":{"method":"GET","header":[],"url":"http://localhost:8080/schedules"},"status":"OK","code":200,"_postman_previewlanguage":null,"header":[{"key":"Content-Type","value":"application/json"},{"key":"Transfer-Encoding","value":"chunked"},{"key":"Date","value":"Fri, 17 Oct 2025 09:05:40 GMT"},{"key":"Keep-Alive","value":"timeout=60"},{"key":"Connection","value":"keep-alive"}],"cookie":[],"responseTime":null,"body":"[\n    {\n        \"id\": 1,\n        \"title\": \"Add title in the body\",\n        \"content\": \"Add content in the body\",\n        \"registrant\": \"Add your name in the body\",\n        \"createdAt\": \"2025-10-17T17:56:36.097083\",\n        \"modifiedAt\": \"2025-10-17T17:56:36.097083\"\n    },\n    {\n        \"id\": 2,\n        \"title\": \"인터넷 수리기사 방문\",\n        \"content\": \"2025/10/17, 10:00\",\n        \"registrant\": \"박광일\",\n        \"createdAt\": \"2025-10-17T17:58:34.265843\",\n        \"modifiedAt\": \"2025-10-17T17:58:34.265843\"\n    },\n    {\n        \"id\": 3,\n        \"title\": \"점심 약속\",\n        \"content\": \"2025/11/10, 12:30, 돌고래식당\",\n        \"registrant\": \"김조하\",\n        \"createdAt\": \"2025-10-17T18:01:52.235813\",\n        \"modifiedAt\": \"2025-10-17T18:01:52.235813\"\n    },\n    {\n        \"id\": 4,\n        \"title\": \"화상 회의\",\n        \"content\": \"2025/11/10, 20:00, Zoom\",\n        \"registrant\": \"김조하\",\n        \"createdAt\": \"2025-10-17T18:03:53.958397\",\n        \"modifiedAt\": \"2025-10-17T18:03:53.958397\"\n    },\n    {\n        \"id\": 5,\n        \"title\": \"이보나 결혼식\",\n        \"content\": \"2025/12/13, 14:00\",\n        \"registrant\": \"이제일\",\n        \"createdAt\": \"2025-10-17T18:05:28.373675\",\n        \"modifiedAt\": \"2025-10-17T18:05:28.373675\"\n    }\n]"}],"_postman_id":"74d9c2f5-8f21-42e5-8c43-e3ac9b49392f"},{"name":"작성자별 일정 조회","id":"9e0ff6b3-cbe8-44c4-8c4d-e7ee34f3a507","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"http://localhost:8080/schedules/register/?registrant","description":"<p>입력된 작성자명 <code>registrant</code> 으로 등록된 전체 일정을 조회하는 GET request입니다.</p>\n<ul>\n<li>조회 성공 시 <code>200 OK</code> 응답을 받습니다.</li>\n</ul>\n","urlObject":{"protocol":"http","port":"8080","path":["schedules","register",""],"host":["localhost"],"query":[{"description":{"content":"<p>작성자명</p>\n","type":"text/plain"},"key":"registrant","value":null}],"variable":[]}},"response":[{"id":"137bb137-8926-4329-9930-e398c5e408c8","name":"GetRegiExample","originalRequest":{"method":"GET","header":[],"url":"http://localhost:8080/schedules/register/김조하"},"status":"OK","code":200,"_postman_previewlanguage":null,"header":[{"key":"Content-Type","value":"application/json"},{"key":"Transfer-Encoding","value":"chunked"},{"key":"Date","value":"Fri, 17 Oct 2025 09:08:03 GMT"},{"key":"Keep-Alive","value":"timeout=60"},{"key":"Connection","value":"keep-alive"}],"cookie":[],"responseTime":null,"body":"[\n    {\n        \"id\": 3,\n        \"title\": \"점심 약속\",\n        \"content\": \"2025/11/10, 12:30, 돌고래식당\",\n        \"registrant\": \"김조하\",\n        \"createdAt\": \"2025-10-17T18:01:52.235813\",\n        \"modifiedAt\": \"2025-10-17T18:01:52.235813\"\n    },\n    {\n        \"id\": 4,\n        \"title\": \"화상 회의\",\n        \"content\": \"2025/11/10, 20:00, Zoom\",\n        \"registrant\": \"김조하\",\n        \"createdAt\": \"2025-10-17T18:03:53.958397\",\n        \"modifiedAt\": \"2025-10-17T18:03:53.958397\"\n    }\n]"}],"_postman_id":"9e0ff6b3-cbe8-44c4-8c4d-e7ee34f3a507"},{"name":"특정 일정 조회","id":"28ab6880-858c-4c41-ad49-534d3b7a7c4f","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"http://localhost:8080/schedules/1","description":"<p>입력받은 ID <code>id</code> 로 등록된 일정 1건을 조회하는 GET request입니다.</p>\n<ul>\n<li><p>조회 성공 시 <code>200 OK</code> 응답을 받습니다.</p>\n</li>\n<li><p>해당 ID로 등록된 일정이 없는 경우 <code>IllegalStateException</code> \"존재하지 않는 일정입니다.\" 메세지를 받습니다.</p>\n</li>\n</ul>\n","urlObject":{"protocol":"http","port":"8080","path":["schedules","1"],"host":["localhost"],"query":[],"variable":[]}},"response":[{"id":"a4456163-fd53-4a32-a6be-360d2c0a715b","name":"GetOneExample","originalRequest":{"method":"GET","header":[],"url":"http://localhost:8080/schedules/2"},"status":"OK","code":200,"_postman_previewlanguage":null,"header":[{"key":"Content-Type","value":"application/json"},{"key":"Transfer-Encoding","value":"chunked"},{"key":"Date","value":"Fri, 17 Oct 2025 09:13:48 GMT"},{"key":"Keep-Alive","value":"timeout=60"},{"key":"Connection","value":"keep-alive"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": 2,\n    \"title\": \"인터넷 수리기사 방문\",\n    \"content\": \"2025/10/17, 10:00\",\n    \"registrant\": \"박광일\",\n    \"createdAt\": \"2025-10-17T17:58:34.265843\",\n    \"modifiedAt\": \"2025-10-17T17:58:34.265843\"\n}"}],"_postman_id":"28ab6880-858c-4c41-ad49-534d3b7a7c4f"},{"name":"일정 등록","event":[{"listen":"test","script":{"id":"09615551-fe4c-4a97-8222-b8be21f45561","exec":["pm.test(\"Successful POST request\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 201]);","});",""],"type":"text/javascript","packages":{},"requests":{}}},{"listen":"prerequest","script":{"id":"ed8b7e1b-5300-4e98-963a-df5a2c6a5000","exec":["@Getter\r","public class CreateScheduleRequest {\r","\r","    private String title;\r","    private String content;\r","    private String registrant;\r","    private String password;\r","}\r","\r",""],"type":"text/javascript","packages":{},"requests":{}}}],"id":"5d71dfbc-d74f-4294-81f5-de903b922fe1","request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n\t\"title\": \"이보나 결혼식\",\n    \"content\": \"2025/12/13, 14:00\",\n    \"registrant\": \"이제일\", \n    \"password\": \"1400\"\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:8080/schedules","description":"<p>일정을 등록하는 POST request입니다.</p>\n<ul>\n<li><p>일정의 제목, 내용, 작성자명, 비밀번호를 입력합니다.</p>\n</li>\n<li><p>비밀번호는 수정/삭제 동작 시 검증 도구로 사용됩니다.</p>\n</li>\n<li><p>최초 등록 후 비밀번호는 조회할 수 없습니다.</p>\n</li>\n<li><p>등록 성공 시 <code>200 OK</code> 또는 <code>201 Created</code> 응답을 받습니다.</p>\n</li>\n</ul>\n","urlObject":{"protocol":"http","port":"8080","path":["schedules"],"host":["localhost"],"query":[],"variable":[]}},"response":[{"id":"12026cb2-aa15-4784-ba93-c46431595df7","name":"PostExample","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n\t\"title\": \"인터넷 수리기사 방문\",\n    \"content\": \"2025/10/17, 10:00\",\n    \"registrant\": \"박광일\", \n    \"password\": \"1000\"\n}","options":{"raw":{"language":"json"}}},"url":{"raw":"http://localhost:8080/schedules?","protocol":"http","host":["localhost"],"port":"8080","path":["schedules"],"query":[{"key":"","value":null,"type":"text"}]}},"status":"Created","code":201,"_postman_previewlanguage":null,"header":[{"key":"Content-Type","value":"application/json"},{"key":"Transfer-Encoding","value":"chunked"},{"key":"Date","value":"Fri, 17 Oct 2025 08:58:34 GMT"},{"key":"Keep-Alive","value":"timeout=60"},{"key":"Connection","value":"keep-alive"}],"cookie":[],"responseTime":null,"body":"{\n    \"title\": \"인터넷 수리기사 방문\",\n    \"content\": \"2025/10/17, 10:00\",\n    \"registrant\": \"박광일\",\n    \"password\": \"1000\"\n}"}],"_postman_id":"5d71dfbc-d74f-4294-81f5-de903b922fe1"},{"name":"특정 일정 수정","event":[{"listen":"prerequest","script":{"id":"413cd341-bb67-403d-b932-f417812a595a","exec":["@Getter\r","public class UpdateScheduleRequest {\r","\r","    private String title;\r","    private String registrant;\r","    private String password;\r","    private LocalDateTime modifiedAt;\r","}\r",""],"type":"text/javascript","packages":{},"requests":{}}}],"id":"6d583e4f-9409-4e10-9a4d-63f45033b541","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PUT","header":[],"body":{"mode":"raw","raw":"{\r\n    \"title\": \"결혼식 뒷풀이\",\r\n    \"registrant\": \"이제이\",\r\n    \"password\": \"1400\"\r\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:8080/schedules/5","description":"<p>입력받은 ID로 등록된 1건의 일정을 수정하는 PUT request입니다.</p>\n<ul>\n<li><p>수정 성공 시 <code>200 OK</code> 응답을 얻습니다.</p>\n</li>\n<li><p>해당 ID로 등록된 일정이 없을 경우 <code>IllegalStateException</code> \"존재하지 않는 일정입니다.\" 메세지를 받습니다.</p>\n</li>\n<li><p>입력받은 비밀번호 <code>password</code> 와 해당 일정의 비밀번호가 일치하지 않을 경우 <code>IllegalArgumentException</code> \"비밀번호가 일치하지 않습니다.\" 메세지를 받습니다.</p>\n</li>\n</ul>\n","urlObject":{"protocol":"http","port":"8080","path":["schedules","5"],"host":["localhost"],"query":[],"variable":[]}},"response":[{"id":"6606463f-c19b-45c0-80db-81a3e9d9168d","name":"PutExample","originalRequest":{"method":"PUT","header":[],"body":{"mode":"raw","raw":"{\r\n    \"title\": \"결혼식 뒷풀이\",\r\n    \"registrant\": \"이제이\",\r\n    \"password\": \"1400\"\r\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:8080/schedules/5"},"status":"OK","code":200,"_postman_previewlanguage":null,"header":[{"key":"Content-Type","value":"application/json"},{"key":"Transfer-Encoding","value":"chunked"},{"key":"Date","value":"Fri, 17 Oct 2025 10:12:26 GMT"},{"key":"Keep-Alive","value":"timeout=60"},{"key":"Connection","value":"keep-alive"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": 5,\n    \"title\": \"결혼식 뒷풀이\",\n    \"registrant\": \"이제이\",\n    \"modifiedAt\": \"2025-10-17T18:05:28.373675\"\n}"}],"_postman_id":"6d583e4f-9409-4e10-9a4d-63f45033b541"},{"name":"특정 일정 삭제","event":[{"listen":"prerequest","script":{"id":"0c7c4bf2-070c-4b75-90fc-07cffd07fb2f","exec":["@Getter\r","public class DeleteScheduleRequest {\r","    private String password;\r","}"],"type":"text/javascript","packages":{},"requests":{}}}],"id":"7e7802b9-48e1-4d51-888f-1a3b27ba0a83","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[],"body":{"mode":"raw","raw":"{\r\n    \"password\": \"1230\"\r\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:8080/schedules/3","description":"<p>입력받은 ID로 등록된 1건의 일정을 삭제하는 DELETE request입니다.</p>\n<ul>\n<li><p>수정 성공 시 <code>204 No Content</code> 응답을 얻습니다.</p>\n</li>\n<li><p>해당 ID로 등록된 일정이 없을 경우 <code>IllegalStateException</code> \"존재하지 않는 일정입니다.\" 메세지를 받습니다.</p>\n</li>\n<li><p>입력받은 비밀번호 <code>password</code> 와 해당 일정의 비밀번호가 일치하지 않을 경우 <code>IllegalArgumentException</code> \"비밀번호가 일치하지 않습니다.\" 메세지를 받습니다.</p>\n</li>\n</ul>\n","urlObject":{"protocol":"http","port":"8080","path":["schedules","3"],"host":["localhost"],"query":[],"variable":[]}},"response":[{"id":"804c77f9-e919-4efc-8ff9-f5beb74128b1","name":"DeleteExample","originalRequest":{"method":"DELETE","header":[],"body":{"mode":"raw","raw":"{\r\n    \"password\": \"1230\"\r\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:8080/schedules/3"},"status":"No Content","code":204,"_postman_previewlanguage":null,"header":[{"key":"Date","value":"Fri, 17 Oct 2025 10:20:14 GMT"},{"key":"Keep-Alive","value":"timeout=60"},{"key":"Connection","value":"keep-alive"}],"cookie":[],"responseTime":null,"body":null}],"_postman_id":"7e7802b9-48e1-4d51-888f-1a3b27ba0a83"},{"name":"댓글 등록","id":"541457bb-3bec-4a15-a93e-3de9a8553249","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"text\": \"희망하는 거 말고 정보 부탁\",\r\n    \"writer\": \"이제일\",\r\n    \"password\": \"1111\"\r\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:8080/schedules/1/comments","urlObject":{"protocol":"http","port":"8080","path":["schedules","1","comments"],"host":["localhost"],"query":[],"variable":[]}},"response":[],"_postman_id":"541457bb-3bec-4a15-a93e-3de9a8553249"}],"event":[{"listen":"prerequest","script":{"id":"d4510da5-5d0a-418a-af76-0e83691f451f","type":"text/javascript","packages":{},"requests":{},"exec":[""]}},{"listen":"test","script":{"id":"01e51840-7deb-4199-b9f3-b4996c0e3243","type":"text/javascript","packages":{},"requests":{},"exec":[""]}}],"variable":[{"key":"id","value":""},{"key":"title","value":""},{"key":"content","value":""},{"key":"registrant","value":""},{"key":"password","value":""},{"key":"createdAt","value":""},{"key":"modifiedAt","value":""}]}