분류 전체보기23 [KPT 회고] 아웃소싱 프로젝트 Keep - 현재 만족하고 있는 부분좋은 팀원분들과 부담없는 분위기에서 협업할 수 있어서 좋았습니다.팀프로젝트일때의 깃허브 사용법을 숙지할수있었고 협업할수있어서 좋았습니다팀원끼리의 배려와 소통할 수 있는시간 넉넉했다는 부분이 좋았습니다.git gub 커밋 컨벤션을 모든 팀원이 잘 지켜서 진행된 부분이 좋았습니다.Problem - 불편하게 느끼는 부분코드리뷰를 다같이 모여서 했으면 좋았을거같습니다.시간과 예산이 조금더 주어졌더라면..API설계를 더욱 꼼꼼히 하여 개발에 지체되지않도록 해야겠습니다.처음 시작할때 코드 컨벤션을 좀더 자세하게 짜야 겠다고 느꼈습니다.Try - Problem에 대한 해결책, 당장 실행 가능한 것코드 리팩토링 해보기다같이 만들어보는 연습을 꾸준히 하고 열심히 공부하는수밖에 없음회의.. 2024. 12. 11. [KPT 회고] 뉴스피드 프로젝트 다사다난했던 일주일간의 뉴스 피드 프로젝트가 끝이 났다.깃허브 링크KPT 회고KPT 회고란?KPT 는 회고 과정중에 진행하는 한 부분이다. Keep/Problem/Try 는 다음을 의미한다.Keep : 잘하고 있는 점. 계속 했으면 좋겠다 싶은 점.Problem : 뭔가 문제가 있다 싶은 점. 변화가 필요한 점.Try : 잘하고 있는 것을 더 잘하기 위해서, 문제가 있는 점을 해결하기 위해서 우리가 시도해 볼 것들팀원들과 함께 정리해보았다.Keep (현재 잘 진행 되고 있고, 계속 했으면 좋겠는 것)프로젝트를 진행하다가 막히는 부분이 생길 경우 팀원들과 함께 고민해보는 시간을 가졌던 점이 좋았다.역할분담이 잘 이루어진 것 같아서 좋았다.깃허브 PR 을 할 때 approve 및 피드백을 받으며 진행하는 방.. 2024. 11. 25. JPA를 활용한 join 구현과 Project Trouble Shooting 내일배움캠프 SPRING과정 진행중 팀프로젝트로 뉴스피드 프로젝트를 진행.문제의 시작우리의 사이트 컨셉은 스택오버플로우와 같은 개발 지식 공유 페이지로 정해서 진행하게 되었다.나는 게시글 API 에 대한 파트를 담당했다.게시글 전체 검색할 때 친구 추가한 사용자의 경우에 게시글, 댓글, 좋아요, 유저 정보 등 모든 테이블의 값들을 join해서 사용해야 했는데 jpa query에서는 join에 대한 것이 없어서 JPQL을 사용해서 쿼리를 직접 입력하여 진행하게 되었다. sql 문으로 바로 작성해서 사용하기 위해 nativeQuery = true 지정을 하여 조금더 편하게 사용 할 수 있게 하였다.nativeQuery = trueJPA에서 join을 구현할 수 있는 방법내가 찾아본 결과 jpa에서 join .. 2024. 11. 24. [IntelliJ] port error 코딩을 잘 하고 있던 와중에 갑자기 발생한 포트 중복 에러 ***************************APPLICATION FAILED TO START***************************Description:Web server failed to start. Port 8080 was already in use.Action:Identify and stop the process that's listening on port 8080 or configure this application to listen on another port. 분명히 돌리고 있는 서버는 하나인테 이미 사용 중이라는 에러가 발생했다.이전에 IDE에 오류가 발생해서 강제 종료 됐었는데 그때 서버가 안 닫힌 듯 했다. 따라서 .. 2024. 11. 15. [OOP] SOLID 원칙 SRP(Single Responsibility Principle) - 단일책임의 원칙작성된 클래스는 하나의 기능만 가지며 클래스가 제공하는 모든 서비스는 그 하나의 책임을 수행하는 데 집중되어있어야 한다. ⇒ 어떤 클래스를 변경해야 하는 이유는 오직 하나뿐이다.클래스가 변경 될 때 파급 효과가 작으면 된다.OCP(Open Closed Principle) - 개방 폐쇄 원칙객체의 확장은 개방적으로, 객체의 수정은 폐쇄적으로 하는 것⇒ 하나의 변화가 다른곳에서 연쇄적 변화를 일으키는 것을 방지 (새로운 기능을 추가 할 때 기존 코드를 수정하지 않고 확장 할 수 있도록 설계할 것)⇒ 다형성 활용LSP(Liskov Substitution Principle) - 리스코프 치환 원칙자식 클래스는 언제나 부모 클래스.. 2024. 11. 12. [TIL/JAVA] AtomicInteger Arrays.stream()을 사용하며 내부에서 index값이 필요해 다른 반복문에서 사용하는 것처럼 아래의 코드로 처리 할려고 했는데 IDE에서 final 또는 atomic으로 사용하라는 에러 문구가 발생했다.int index = 0;Arrays.stream(arr).forEach((num) => { ... index++;}람다 표현식 내부에 사용되는 변수가 왜 final 형이어야 하는지 부터 찾아보자. Lambda람다 식이란? method와 비슷하지만 이름과 파라메터의 타입을 지정할 필요없이 사용 가능하다.(파라메터1, 파라메터2, ...) -> { // 하나의 명령문만 있을경우 중괄호를 생략할 수 있다. }위와 같이 간결하게 사용이 가능하며 단 한 번만 사용된다. 지역변수와 람다람다의 경우 .. 2024. 10. 24. [TIL/JAVA] try-catch문 무한 루프 내일 배움 캠프의 야구게임 프로젝트 진행 중 catch 문에 접근하게 되면 무한 루프에 빠지는 문제를 발견했다.내부에는 print와 scanner밖에 없었기에 더 이해가 안되서 찾아봤다.try { System.out.print("숫자를 입력해 주세요: "); inputResultNum = scanner.nextInt();} catch (Exception e) { System.out.println("숫자만 입력 가능합니다."); // 다시 재 입력을 받을 수 있도록 continue continue;} 찾아보니 scanner로 받은 값이 정상처리되지 않아 버퍼에 남아있게 되어 발생하는 문제였다.아래처럼 에러 발생 시 scanner를 초기화 시키니 문제가 해결 되었다.try { .. 2024. 10. 23. [TIL/JAVA] ArithmeticException 계산기 프로그램을 만들던 중에 분모가 0일경우를 상정하여 예외처리를 추가하는 과정에서나눗셈 시 소수점 이하를 표시하고 싶어서 자료형을 변경 하였더니 에러가 아닌 Infinity를 출력하기 시작해서 찾아보기 시작했다.이전 코드try { System.out.print("피연산자를 입력해 주세요(숫자 2개) : "); operand1 = sc.nextInt(); operand2 = sc.nextInt(); System.out.print("연산자를 입력해 주세요.(+, -, *, /, %) : "); String operation = sc.next(); // 연산자 구분 부분} catch (NumberFormatException e) { // 입력받은 값이 숫자가 아닌 경우.. 2024. 10. 15. [JAVA] OOP OOP(Object-Oriented Programming)객체 : 속성(field)과 동작(method)으로 구성존재하는 것 중 자신의 속성을 가지고 있으며 식별 가능 한 것객체 모델링 : 객체를 설계하는 과정메소드 호출 : 객체가 다른 객체의 기능을 이용하는 것캡슐화외부에서 내부 구조를 알 수 없다.상속부모객체의 내용은 자식객체에서 사용 가능하다.추상화공통된 부분을 모아서 상위 개념으로 선언다형성하나의 행위를 여러가지 형태로 분할 가능오버로딩같은 이름의 메소드를 여러개 정의 하는 것매소드 이름은 같지만 파라메터 타입과 개수를 다르게 함public int add (int a, int b) { return a+b;}public double add (double a, double b) { return a +.. 2024. 10. 9. [JAVA] Collection Collection참조형 변수만 저장List : 데이터 중복 허용(~ Array ; 정적 배열(크기 고정)) ; 동적 배열(크기가 가변적)동적이기에 초기화 필요 없음ArrayListArrayList intList = new ArrayList(); // 선언 // .add([num], value) : 추가 (num 입력시 num번째에 추가) // .get(num) : num번 째 값 반환 // .set(num, value) : num 번 째 value로 값 수정 // .remove(num) : num 번 째 삭제 // .toString() : 문자열로 반환 -> toString을 안하면 arrayList type으로 출력 // .clear() : 전체 삭제 // 궁금증 // .set은 value 여러개가 .. 2024. 10. 8. [JAVA] 조건문, 반복문, 배열 조건문ifif(조건) { // ...}else if(조건) { // ...}else { //...}switchswitch(피연산자) { case 조건: //... break; case 조건: //... break; // ... default: //...}반복문forfor(초깃값; 조건; 연산) { // ...}for(변수 : array) { // 변수에 array 하나씩 저장되며 연산}whilewhile (조건){ // ...}do { // while문과 다르게 연산 후 조건 확인}while(조건)break : 반복문 종료continue : 다음 연산으로 넘어감(반복 패스)배열타입[] 변수명;타입 변수명[];// 초기화// new 로 초기화 할 시 기본 값 int: 0 bolean: false s.. 2024. 10. 8. [JAVA] 01 JDK(Java Development Kit) 역할compiler: .java -> .classJRE : Java Runtime Environment(자바 실행 환경)JDB : Java Debugger -> debuggingpublic static void main(String[] args)public/private : class 경로 외부에서 접근 가능 한지 여부 ( public : 실행 가능 )main method : java에서 가장 먼저 실행 됨static : 이 프로그램 실행 시 무조건 실행 -> 앱 실행 시 한번만 정의 OR static 끼리 호출 가능void: return 값이 없음String[] args: 매개변수public static void main(String[] args) { //.. 2024. 10. 8. 이전 1 2 다음