728x90
반응형
SMALL

23.02.20

  • 43일 해야할 일
    • [x] 자바 이론 공부 (String Buffer 클래스의 메서드 들을 차례!)
    • [x] spring 강의듣기! (복습! + HTTP강의 5개 듣기)
    • [x] 알고리즘 문제 1개 풀기
    • [x] 개인과제 오류 고쳐보기!
    • [x] 팀과제 하기
    • [x] 스프링 스터디 참석

눈물 나는 에러놈들 non-static method <S>save(S) cannot be referenced from a static context

왜 나오는 걸까 고민고민고민고민하다가;;;;;;;;

다른 분께 물어봤더니 주소창을 하나 주셨다…. 거기에 따르면 내가 뭔가 잘못 호출했다…오타오타…언제 찾나 했는데.. 찾음…

그 결과.. 잠시 울고 와야겠다… 이놈의 오타…

//save에 에러발생 왜 나는 것인가 한참을 고민함;;;;
Reply reply = ReplyRepository.saveAndFlush(Reply.builder()
// replyRepository를 대문자로 써서 그랬다...
Reply reply = replyRepository.saveAndFlush(Reply.builder()

복합키 클래스

Invocation of init method failed; nested exception is org.hibernate.AnnotationException: mappedBy reference an unknown target entity property: com.example.replyblog.replay.entity.Reply. Blog in com.example.replyblog.blog.entity.Blog.comments

Invocation of init method failed; nested exception is org.hibernate.AnnotationException: mappedBy reference an unknown target entity property: com.example.replyblog.replay.entity.Reply.Blog in com.example.replyblog.blog.entity.Blog.comments

Invocation of init method failed; nested exception is java.lang.IllegalStateException: Ambiguous mapping. Cannot map 'blogController' method

//    @GetMapping("/")
//    public ModelAndView home() {
//        return new ModelAndView("index");
//    }

GetMapping이 2개여서 겹쳐서 난 오류!!

아니.. 저번에도 이랬는데 ㅠㅠ계속 실수합니다 ㅠㅠ 다음엔 실수하지 말기!

[THYMELEAF][http-nio-8080-exec-3] Exception processing template "login": Error resolving template [login], template might not exist or might not be accessible by any of the configured Template Resolvers

@Valid 유효성검사

BindingResult

Request processing failed; nested exception is com.example.replyblog.util.CustomException

요청하는 과정에서 실패! → 토큰 변경 안해서 생긴 오류;;

Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.dao.DataIntegrityViolationException: not-null property references a null or transient value : com.example.replyblog.blog.entity.Blog.title; nested exception is org.hibernate.PropertyValueException: not-null property references a null or transient value : com.example.replyblog.blog.entity.Blog.title] with root cause

ㅋㅋㅋㅋㅋ 제가… 전체적으로 수정했는데.. titlename을 title으로 변경한걸 깜빡하고 왜 안되지 하고 있었습니다… 하하..

728x90
반응형
LIST

'일상 > TIL' 카테고리의 다른 글

45일차  (0) 2023.02.23
43일차  (0) 2023.02.21
42일차  (0) 2023.02.19
41일차  (0) 2023.02.18
40일차  (0) 2023.02.18
728x90
반응형
SMALL
  • 42일 해야할 일
    • [x] 자바 이론 공부
    • [x] spring 강의듣기!
    • [x] 알고리즘 문제 1개 풀기
    • [x] 개인과제 오류 고쳐보기!

댓글 기능 구현 오류

@GetMapping("/api/blog/{id}")
    public ResponseEntity<AllResponseDto> getBlog(@PathVariable Long id) {
        return blogService.getBlog(id);
    }

게시글 1개 조회에서 Controller와 Service의 이름이 달라서 생긴오류 해결

→ 전체 조회를 Blogs로 했는데 1개 조회에도 Blogs를 사용함…ㅠ 제대로 적어 놓자!!

게시글 삭제에서 정보를 가져올 dto 달라서 생긴 오류…

public ResponseEntity<MessageDto> deleteBlog(Long id, HttpServletRequest request) {
...
return ResponseEntity.ok().body(MessageDto.builder()
                            .statusCode(HttpStatus.OK.value())
                            .msg("게시글 삭제 성공.")
                            .build()
                    );
        } else {
            return null;
        }

MessageDto = MessageDto 로 설정해야하는데

수정에서 그대로 복사해 온 과정에서 변경을 하지 않았다..!

게시글 수정과 삭제에서 user.get()을 인식 못함 ;;;;;;; 왤까 ^^^^^^^^^^^^^^

cannot find symbol 이런 이유라는데… 굉장히 원인이 많은데 차근차근 하나씩 풀어갈 예정이다..!!

Cannot find symbol 의미

포괄적인 에러로 작성한 소스코드에 문제가 숨어있거나 컴파일 하는 방식에 문제가 있을 때 발생한다.

자바의 소스코드는 아래와 같은 구성요소 이루어져 있다.

  1. 키워드 : true, false, class, while 등
  2. 리터럴 : "Hello", 'H', 33 등
  3. 오퍼레이터나 알파벳, 숫자가 아닌 문자 : +, ", { 등
  4. 식별자 : 클래스명(Integer 등), 변수명(i 등), 함수명(toString 등)
  5. 주석 및 공백

이 때 cannot find symbol 은 식별자와 관련된 오류이다.

코드가 컴파일될 때 컴파일러는 소스코드의 식별자들이 각각 어떤 의미가 있는지 해석한다. 이 작업을 할 수 없는 경우(= 컴파일러가 소스코드를 해석할 수 없음) cannot find symbol 에러가 출력된다.

Cannot find symbol 원인

굉장히 다양한 원인이 때로는 복합적으로 있을 수 있다.

  1. 스펠링 오작성 : 예를들어 StringBuffer를 SpringBuffer로 작성. SpringBuffer 클래스가 없어 코드를 컴파일할 수 없다.
StringBuffer sb = new SpringBuffer();

Error:(5, 31) java: cannot find symbolsymbol: class SpringBufferlocation: class com.example.demo.cannotfindsymbol.Test

  1. 대소문자 오작성 : StringBuffer -> Stringbuffer로 작성.
  2. 변수 선언을 하지않고 사용
System.out.println(str); // 선언하지 않은 str 변수 사용
  1. 다른 영역에 선언한 변수를 사용하는 오류 : for문 영역의 변수를 외부에서 접근.
for(int i=0; i<2; i++){
    System.out.println(i);
}

System.out.println(i); // i를 찾을 수 없어 오류
  1. 객체가 가지고 있지 않은 변수나 함수에 접근하는 경우
String str = "123";
str.reverse(); // String 객체는 reverse() 메소드가 없다.
  1. new 키워드를 작성하지 않은 경우
StringBuffer sb = StringBuffer();
  1. 같은 클래스명의 다른 패키지 클래스가 import 된 경우 : IDE의 자동 임포트 기능을 이용하다 보면 종종 발생한다. 사용하고자 하는 패키지의 클래스가 임포트 되었는지 확인한다.
  2. 세미콜론(;)이 잘못 작성된 경우 : 아래는 없어야 될 세미콜론이 중간에 작성되었다.

세미콜론에 의해 for(~~~) 와 코드블럭{ }이 분리되며 코드블럭{ }에서 i는 선언되지 않았으므로 오류가 발생한다.

for (int i = 0; i < 100; i++); {
    System.out.println("i : " + i);
}
  1. 오퍼레이터가 오작성 된 경우 : 아래에서는 *를 생략함으로써 i라는 메소드를 찾으나 없으므로 오류가 발생한다.
int a = 1;
int b = 2;
int i = 1;

int result = i(a+b); // i*(a+b) 에서 *를 작성하지 않음
728x90
반응형
LIST

'일상 > TIL' 카테고리의 다른 글

43일차  (0) 2023.02.21
43일차  (0) 2023.02.20
41일차  (0) 2023.02.18
40일차  (0) 2023.02.18
39일차  (0) 2023.02.16
728x90
반응형
SMALL

이번 주차는 스프링 숙련 주차에서 심화 주차로 넘어갔습니다!
숙련 주차에는 게시글을 완성하고, 회원가입과 로그인을 적용시켰고
오늘까지 댓글 구현을 끝낼려고 하고 있습니다!
(가능하겠죠...??)ㅠ

일단 시큐리티나 테스트 코드에 공부를 하면서 하고 있는데, 많이 부족한 것 같습니다..
자바, 스프링, 스프링 JPA 들도 아직 부족한게 많은데 시큐리티와 테스트코드까지 더 공부해야 하는 것이..
현재 자바와 스프링을 스터디를 하고 있지만, 복습하고 있지만.. 여전히 거북이가 기어가는 수준인거 같아용...ㅎㅎㅎ

그래도 꾸준히 해서 실력이 눈에 띄게 늘었으면 좋겠습니다..!! 다시 화이팅..!!

이번 주차 회고록에서는 ORM,SQL,MVC에 대해 정리를 했다.

 

ORM이란?

ORM은 Object Relational Mapping 즉, 객체-관계 매핑의 줄임말이다. 객체-관계 매핑을 풀어서 설명하자면 우리가 OOP(Object Oriented Programming)에서 쓰이는 객체라는 개념을 구현한 클래스와 RDB(Relational DataBase)에서 쓰이는 데이터인 테이블 자동으로 매핑(연결)하는 것을 의미한다. 그러나 클래스와 테이블은 서로가 기존부터 호환가능성을 두고 만들어진 것이 아니기 때문에 불일치가 발생하는데, 이를 ORM을 통해 객체 간의 관계를 바탕으로 SQL문을 자동으로 생성하여 불일치를 해결한다. 따라서 ORM을 이용하면 따로 SQL문을 짤 필요없이 객체를 통해 간접적으로 데이터베이스를 조작할 수 있게 된다.

전에 정리했던 JPA는 ORM기술을 이용한 인터페이스이다.즉 객체와-관계형 데이터베이스를 매핑 시켜주는 기술이고 객체를 통해 DB조작을 가능하게 해준다.

장점

ORM을 이용하면 SQL문이 아닌 클래스의 메서드를 통해 데이터베이스를 조작할 수 있어, 개발자가 객체 모델만 이용해서 프로그래밍을 하는 데 집중할 수 있게한다. SQL 문을 사용하면서 같이 필요한 선언문, 할당, 종료 같은 부수적인 코드가 사라지거나 줄어들며, 각종 객체에 대한 코드를 별도로 작성하여 코드의 가독성이 증가하게 된다.

자바 기능을 통해 DB를 조작할 수 있다.

단점

ORM을 사용하는 것은 매우 편리하지만 그만큼 신중하게 설계해야한다. 프로젝트의 복잡성이 커질 수록 난이도도 올라가고 부족한 설계로 잘못 구현되었을 경우 속도 저하 및 일관성을 무너뜨리는 문제점이 생길 수 있다. 또한 일부 자주 사용되는 대형 SQL문은 속도를 위해 별도의 튜닝이 필요하기 때문에 결국 SQL문을 써야할 수도 있다.

SQL이란?

SQL(Structured Query Language, 구조적 질의 언어)은 관계형 데이터베이스 시스템(RDBMS)을 제어하는 컴퓨터 언어를 말한다.

SQL 명령어 종류

SQL 쿼리문은 역할에 따라 3가지로 분류되며 아래와 같습니다.

  • DDL(Data Definition Language, 데이터 정의어)DB 오브젝트를 생성, 삭제, 변경하는 역할을 하며, DB 설계 단계에서 주로 사용됩니다. (CREATE, DROP, ALTER...)
  • DML(Data Manipulation Language, 데이터 조작어)DB를 조회, 삽입, 삭제, 변경하는 역할을 하며, 관리 목적의 쿼리문입니다. (SELECT, INSERT, UPDATE...)
  • DCL(Data Control Language, 데이터 제어어)사용자의 권한을 관리하는 역할을 합니다. (GRANT, DENY, REVOKE...)

이중 개발자가 일반적으로 DB를 사용할 때 사용하는 언어의 중요도는 DML > DDL > DCL 순입니다.

DB를 조회하고, 관리하는 DML을 가장 많이 사용하며, DB의 테이블의 스키마(설계 수준)를 수정하는 DDL을 그다음으로 많이 씁니다.

DCL은 DBA(DataBase Administration, 데이터베이스 관리자)가 주로 사용하며 일반 개발자는 사용할 일이 드뭅니다.

MVC란

  • 1.model데이터베이스에서 데이터를 가지고 올 수 있고 데이터를 가지고 있을 수도 있다.데이터베이스와 소통한다.컨트롤러에게 데이터를 전달한다.모델이 뷰와 직접 소통하는 일은 없다.
  • View유저가 보는 화면을 보여주게 하는 역할이다.데이터를 받고 그리는 역할을 수행한다.모델이나 데이터베이스와는 소통하지 않고 컨트롤러와만 소통한다.컨트롤러에게 엑션이나 데이터를 전달만 하고 전달 받기만 한다.
  • Controller뷰에서 엑션과 이벤트에 대한 인풋 값을 받는다.모델에게 전달해주기 전에 데이터를 가공할 수 있다.뷰에게 모델에게 받은 데이터를 가공할 수 있다.

이렇게 세가지로 나눠서 API를 설계하는 패턴을 말한다.

MVC 디자인 패턴 특징

  • 소프트웨어가 서비스하기 위해서는 여러 과정과 처리가 필요한다.
  • 그러한 처리들을 각 기능 단위 별로 나눠서 처리한다.
  • 그러므로써 프로그래밍을 할 때 역할을 하는 정돈된 코드를 작성할 수 있다.
  • 디버깅이나 코드 가독성을 높인다.
728x90
반응형
LIST

'일상 > WIL' 카테고리의 다른 글

7주차 WIL  (0) 2023.03.05
6주차 WIL  (0) 2023.02.26
4주차WIL  (0) 2023.02.12
3주차 WIL  (1) 2023.02.05
2주차 WIL  (0) 2023.01.29

+ Recent posts