본문 바로가기

전체 글34

[newsfeed] 댓글과 게시글의 '좋아요' 기능, 어떤 식으로 구현하는게 좋을까? 프로젝트 상의 게시글(Post)과 댓글(Comment)에 각각 좋아요 기능이 구현되어야 했다.첫 번째 구현한 방법은 아래 ERD 다이어그램과 같다.  좋아요 기능이 유저-게시글 / 유저-댓글의 형태로 중복이 되지 않게 하나만 존재하게 하는 방법에 대해서도 고민 했는데, 처음에는 검증을 하려고 생각했으나 더 좋은 방법이 있었다.  다중 컬럼을 아래 코드와 같이 unique 제약조건을 사용해 묶었다. 여기서의 문제점은 굳이 UniqueConstraint를 사용할 필요가 없었던 것이다.Service에서 해당되는 행이 존재하면 삭제하는 동작이 있기 때문이다.@Table(uniqueConstraints ={ @UniqueConstraint(name = "user_like_comment", columnN.. 2024. 12. 30.
2024-12-17 / Controller와 RestController 차이, Cookie,Session 메소드 재정리 @Controller : 주로 view(html)를 반환하기 위해 사용, 메소드가 반환하는 값은 보통 뷰 이름.@RestController : 클라이언트가 JSON 또는 XML 형식의 데이터만 필요로하는 경우 사용 ServletRequest : 모든 종류의 프로토콜(HTTP, FTP 등)을 처리할 수 있도록 설계된 인터페이스- 요청 파라미터와 속성에 접근 : getParameter, getAttribute 등- HTTP에 특화된 기능은 제공하지 않음 HttpServletRequest : ServletRequest를 확장한 서브인터페이스로 HTTP 프로토콜에 특화된 기능을 제공- HTTP 헤더 정보 접근 : getHeader, getCookies 등- HTTP 메소드(GET, POST 등)확인 : getM.. 2024. 12. 17.
[Todolist] ToDoList 과제 1차 TIL - 필수 구현까지 1차 API 설계  최종 API 설계(Notion 으로 작성)  ERD 설계 : 하나만 나오는게 맞나? 라고 계속 생각했는데 필수과제에선 하나만 나오는게 맞다.도전 과제를 염두해두고 만든 것러프 버전 내용Spring jdk : corretto 17.0.13Spring Boot : 3.3.6Dependencies : Spring Web, Lombok, MySQLDriver, Spring Data JDBC, ThymeleafDatabase : MySQL   사용한 테이블 생성 및 Postman raw  -- User 테이블 생성CREATE TABLE USER ( USER_ID VARCHAR(255) PRIMARY KEY, -- 사용자 ID, 기본 키 USER_NAME VARCHAR(100), .. 2024. 12. 5.
2024-12-02 (1) / Spring강의 sparta 3주차 코드 spring-basic-jsp 실습 | 전통적인 MVC 구조 파일 구조 src/main/java  - /com/example/springbasicjsp 아래 파일 MvcPostFormServlet, MvcPostListServlet, MvcPstSaveServlet, Post, PostRepository, ServletInitializer, SpringBasicjspApplication(메인 실행) src/webapp/WEB-INF/views 아래 파일- post-form.jsp : 블고그 포스트 작성 페이지, 제목, 내용, 저장 버튼- posts.jsp - save-result.jsp 블로그 작성 폼 서블릿localhost:8080/mvc/posts 로 들어가게 되면 post-form.jsp 의 view가 보임 MvcPostFormServlet 자바 파일로 들어.. 2024. 12. 2.
[코딩테스트 연습] 이상한 문자 만들기 코딩테스트 연습 - 이상한 문자 만들기 | 프로그래머스 스쿨class Solution { public String solution(String s) { String answer = ""; String[] an = s.split(" "); for(int j=0;j 처음에 이렇게 짰는데, 공백이 두개이거나 맨 앞에 공백이 있는걸 고려해야 된다더라..(보니까 나랑 비슷하게 split이용해서 짠 사람들 전부 같은 문제를 겪고 있었다.)그러니까 공백이 두개가 되면 i로 설정해놓은 인덱스가 밀리고 an 배열에 저장되는게 달라서 그런다 했다.계속 기억하자... 문자열 바꿀땐 StringBuilder 세번째 보는데 잘 인지가 안된다.class Solution { publ.. 2024. 11. 17.
2024-11-14 / 최소공배수-최대공약수, 메소드 체이닝 데일리 루틴에서 최소공배수와, 최대공약수를 구하는 방법이 나왔는데아예 어떻게 구하는지 몰라서 쳐봤더니 이런 게 나왔다.a가 b보다 작을 때, b를 a로 나눈 나머지를 c라고 했을 때 b를c로 나눈 나머지 d가 0이 되는 순간의 c값이 최대공약수가 된다는 것이었다. 처음에 봤을 때 제대로 이해가 안가 대입법으로 구해보려했다. 12 7272%12 = 0 이렇게되면 12가 최대공약수가 되고 23 8484%23=15 니까 23%15=8, 15%8=1 8%1=0 여기는 최대공약수가 1이 되고 24 6060%24=12 니까 24%12=0 이되서 12가 최대공약수가 된다. 최소공배수는 구하기 쉬웠다. 두 수를 곱한 후 최대공약수를 나누기만 하면 되었다. 이 조건을 만족하면서 구현하기 위해선 일단 a그 다음엔 나머지가.. 2024. 11. 14.
2024-11-07 / PJ - 헤맸던 부분, Spirng - Item 정의, JAVA-Mysql 연결 및 쿼리 JavaScript 이벤트 처리 삭제 버튼의 클릭 이벤트$("#deleteBtn").click(async function () { console.log("삭제 동작 확인"); }); //콘솔에 로그가 출력되지 않음$(".dinner-getcontainer").on("click", ".delete-dinner", async function () {console.log("삭제 동작 확인"); });이벤트 위임방식 사용 : dinner-getcontainer는 부모 요소이며, 지정된 자식 요소 delete-dinner에서 click 발생 시 3번째에 있는 함수가 실행됨이벤트 버블링의 개념 : 자식 요소에서 발생한 이벤트는 상위로 전파됨CSS 레이아웃 문제 버튼 위치 조정: float 기능을 사용하여 해결함. .. 2024. 11. 7.
2024-10-31 / 소켓 프로그래밍, 참조타입 변수, 메모리 영역, 리스트 선언 🔥학습 계획[x] 데일리 SQL, 알고리즘 풀이[x] java 책(~178p) 소켓까지[x] 혼자공부하는자바 (164p~210p)[x] TIL 작성 ⏰기타 예정사항[ ] 영어 공부[x] 국민취업제도 상담(11:00~12:00) ⚠️모르는 부분 정리해야 할 것(TIL)[x] 참조타입의 변수란?[x] 메모리 영역[x] TCP 소켓 프로그래밍 (예제 코드 추가)[x] UDP 소켓 프로그래밍 (예제 코드 추가)    import java.util.*;class Solution { public int[] solution(int[] arr, int divisor) { int length = arr.length; List list = new ArrayList();//리스트 선언 .. 2024. 10. 31.
2024-10-27 사전캠프 12일차 / 하샤드 수, String 객체 메소드 🔥 학습 계획[ v ] 데일리 SQL, 알고리즘 풀이[ v ] java 책 (~123p)[ v ] TIL 작성⚠️ 모르는 부분 정리해야 할 것(TIL)[ v ] String 클래스의 생성자 / 메소드   데일리 루틴 알고리즘 풀이코딩테스트 연습 - 하샤드 수 | 프로그래머스 스쿨import java.lang.*;class Solution { public boolean solution(int x) { boolean answer = true; int sum = 0; String s = Integer.toString(x); int length = s.length(); for(int i =0; i하샤드 수 설명에 따라 했지만 일부 케이스에서 .. 2024. 10. 27.
[Java] 형 변환 (Conversion) 숫자 -> 숫자의 형 변환- 암묵적 형 변환(Implicit Conversion) double d = 10.0 + 20; // 20이 20.0으로 변환되어 계산 됨* 보통 작은것 > 큰것으로 계산할 때 - 명시적 형 변환(Explicit Conversion) // 정수를 실수로 변환하는 방식int i1 = 20.5; //Errorint i2 (int) 20.5;//20으로 저장되고 이를 명시적 형 변환, Casting이라고 함* 큰것 > 작은것으로 계산할 때 / double형을 int에 넣는다거나, 손실이 있을 때 문자 -> 숫자의 형 변환String > int 형 변환Integer 클래스의 parseInt 함수와 valueOf 함수 사용String a = "3";int b = Integer.parseI.. 2024. 10. 22.