분류 전체보기 98

내일배움캠프 팀프로젝트 - 뉴스피드 프로젝트(2)

뉴스피드 프로젝트 3일차 오늘 한 일 Reply 비즈니스 로직 코드수정 C,U,D 기능 swagger에서 테스트 완료 문제 해결 1. status 500 에러 발생으로 인해 DB수정 후 spring을 실행했는데, Table [reply] contains physical column name [feed_id] referred to by multiple logical column names: [feed_Id] 에러가 발생했다. 이유는 컬럼이름의 대소문자를 잘 못 입력해서였다. 수정 후 다시 Run을 했는데 2차적으로 member_id 관련 에러가 발생. 또 다시 DB수정, 컬럼 이름관련해서 에러가 많이 발생했다. 항상 대소문자, 언더바 구분을 잘해서 작성하는 습관을 들여야겠다. 2. ExceptionHand..

프로그래머스 코딩테스트 / 나머지가 1이 되는 수

https://school.programmers.co.kr/learn/courses/30/lessons/87389 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr class Solution { fun solution(n: Int): Int { for (x in 1..n - 1) { if (n % x == 1) return x } return 0 } }

Algorithm 2024.01.10

내일배움캠프 팀 프로젝트 - 뉴스피드 프로젝트 (1)

뉴스피드 프로젝트 프로젝트 소개 프로젝트 명: 리뷰어스 (reviewus, reviewers) 소비자들이 사용한 제품, 장소, 서비스 등에 리뷰하여 정보를 공유하는 뉴스피드 웹 서비스이다. 댓글 알바 없는 순수 리뷰 실 사용자 서비스를 만들고자 하여 계획하게 되었다. 필수 구현 기능 게시물 CRUD 뉴스피드 기능 (메인페이지, 전체 조회페이지) 상세보기 (디테일 페이지) 댓글 CRUD 사용자 인증/인가 (회원가입, 로그인/로그아웃, 인가) 프로필 관리 추가 구현 기능 이메일 가입 및 인증 기능 사진 추가기 기능(S3) 좋아요 기능 와이어 프레임 ERD API 명세 팀 프로젝트가 시작됐다. 컨디션 관리를 못해 집중도 안되고 몸도 별로 안좋았어서 (핑계) 학습량이 많이 부족했다. 그래서 내 실력에 자신이 없..

Spring 에러 (please set 'javax.persistence.jdbc.url')

'please set 'javax.persistence.jdbc.url 'hibernate.connection.url' 'hibernate.dialect' - 에러 이미지 하이버네이트 (Hibernate)의 설정이 잘 못 되어 나온 오류같은데.. 에러를 극복하는 건 좋지만 지금 하이버네이트고 컨테이너 어쩌고 하면 난 졸도할지도 모른다.. 간략하게 표현하자면 스프링에서 Dialect 설정을 찾지 못해서 생긴 에러이다. 해결방법 application.properties에 spring.jpa.properties.hibernate.dialect= org.hibernate.dialect.MySQLDialect 를 추가해서 해결...! 참고: https://velog.io/@rockstar/Docker-MySQL-..

TroubleShooting 2024.01.02

Spring 입문 - DI (의존성 주입), IoC (제어의 역전), Bean

Dependency Injection (의존성 주입) 객체가 자체적으로 필요로 하는 의존성을 생성하는 것이 아니라, 외부에서 주입받는 디자인 패턴입니다. 객체간의 결합도를 낮추기 위해 사용합니다. 주로 Contructor 기반 주입, Field 기반 주입, Setter 기반 주입이 있습니다. DI를 사용하지 않을 경우 package org.example.ChickenStore class ChickenStoreWithoutDI { private val chicken: Chicken = FriedChicken() fun getCookedChicken(): Chicken { chicken.cook() return chicken } } class ChickenStoreWithoutDI2 { private val..

SpringBoot 2023.12.26

제네릭

제네릭 (Generic) 이란 클래스 내부에서 사용할 자료형을 나중에 인스턴스를 생성할 때 확정한다. 자료형의 객체들을 다루는 메서드나 클래스에서 컴파일 시간에 자료형을 검사해 적당한 자료형으로 선택할 수 있게 하기 위해 사용한다. 제네릭을 사용하면 객체의 자료형을 컴파일할 때 체크하기 때문에, 객체 자료형의 안전성을 높이고 형 변환의 번거로움이 줄어든다. 제네릭 사용방법 앵글브라켓() 사이에 형식 매개변수를 넣어 선언한다. 이때 형식 매개변수는 하나 이상 지정 가능하다. 형식 매개변수는 자료형을 대표하는 용어로 T와 같이 특정 영문 대문자를 사용한다. 제네릭을 사용하면서 얻을 수 있는 장점은 의도하지 않은 자료형의 객체를 지정하는것을 막고 객체를 사용할 때 원래의 자료형에서 다른 자료형으로 형 변환시 ..

Kotlin 2023.12.25

인터페이스

인터페이스 (Interface) 란 인터페이스에는 abstract로 정의된 추상메서드나 일반메서드가 포함된다. 추상클래스처럼 프로퍼티를 통해 상태를 저장할 수 없고 선언만 가능하다. 인터페이스도 마찬가지로 객체를 생성할 수 없고 하위 클래스를 통해 구현 및 생성해야한다. 인터페이스를 사용하는 이유? 추상클래스를 사용할 때의 제한을 생각해보자. 하위클래스는 상속을 하나만 허용한다는 단점이 있다. 또한 상위클래스와 하위클래스의 강한 연관이 생기면서 상위클래스의 영향을 그대로 받게된다. 그래서 상위클래스가 수정되었을 때 하위 클래스를 일일이 확인하기 어려운 경우 부작용이 발생할 수 있는것이다. 인터페이스는 클래스가 아니다. 그래서 상속의 개념이 아닌 구현의 개념이라 구현클래스 (하위클래스)와 강한 연관을 가지..

Kotlin 2023.12.25

추상클래스

추상클래스란 Abstract Class는 선언 등의 대략적인 설계 명세와 공통의 기능을 구현한 클래스이다. 추상이란말은 구체적이지 않은 것을 나타낸다. 추상클래스를 상속하는 하위 클래스에서 추상클래스의 내용을 더욱 구체화시켜야한다. abstract라는 키워드와 함께 선언하며 추상클래스로부터 일반적인 객체를 생성하는 방법으로 인스턴스화될 수 없다. 다만 추상클래스를 상속하는 하위 클래스가 어떻게 만들어야하는지를 나타내는 용도로 사용된다. abstract 사용 예시 // 추상클래스, 주 생성자에는 비추상 프로퍼티 선언의 매개변수 3개가 있음 abstract class Vehicle(val name: String, val color: String, val weight: Double) { // 추상 프로퍼티(반..

Kotlin 2023.12.25

지연초기화

lateinit / lazy 보통은 클래스에서 기본적으로 선언하는 프로퍼티는 null 값을 가질 수 없다. 그러므로 반드시 초기화가 되어야 하는것이 규칙인데, 초기화를 미룰 때 지연초기화 (lateinit, lazy)를 사용한다. 언제 사용할까? 의존성이 있는 초기화나 유닛 테스트를 위한 코드를 작성하면서, 설정에 의한 초기화를 할 때 불편하다. Car클래스의 초기화 부분이 Engine클래스와 의존성을 가질 때, Engine 객체가 생성되지 않으면 완전하게 초기화 할 수 없다. 이처럼 특정 객체에 의존성이 있을 때 지연초기화를 해야한다. lateinit 지연초기화 예시 class Person2 { lateinit var name: String //지연초기화 선언 fun test() { if(!::name..

Kotlin 2023.12.25

프로퍼티 (Getter / Setter)

프로퍼티의 접근 자바의 필드(Fields) 단순한 변수 선언만 가지기 때문에 접근을 위한 메서드를 따로 만들어야 함 코틀린의 프로퍼티 (Properties) 변수 선언과 기본적인 접근 메서드를 모두 가지고 있음 따로 접근 메서드를 만들지 않아도 내부적으로 생성하게 됨 * 자바의 Fields == 코틀린의 Property. 자바에서의 접근 메서드 형식 class Person { // 멤버필드 private String name; private int age; // 생성자 public Person(String name, int age) { this.name = name; this.age = age; } // 게터와 세터 public String getName() { return name; } public v..

Kotlin 2023.12.24