자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
저희 학습내용으로 보면 private Integer age; 는 테이블의 age int, 와 같아서 어노테이션 안써도 된다고 하셨는데 그럼 name 같은경우도 테이블의 그냥 컬럼명과 타입 똑같은 조건인데 왜 어노테이션쓰고 nullable = false, length = 25라고 해야하나요?? 그리고 한가지만 더 질문 드릴게요! 저는 서버 실행하면 콘솔쪽에 따로 쿼리가 안찍히던데 왜그럴까요?? 이상은 없는데 hibernate가 인식이 안되서 그런건지 콘솔에 쿼리가 안찍히네요ㅠㅠ
안녕하세요 먼저 좋은 강의 감사드립니다. CHAR vs VARCHAR를 수강하던 중 궁금한 점이 생겨 질문 남깁니다! 1. CHAR의 경우 미리 공간을 할당해두기 때문에 update 시 파편화되는 부분이 없지만, VARHAR의 경우 길이가 더 길게 update 시 처음 레코드가 저장되었던 공간은 delete marking 후에 새롭게 빈 공간에 레코드를 저장하는 것으로 이해했습니다. 그렇다면 VARCHAR에서 길이가 더 짧거나 길이가 같게 update를 하는 경우는 어떻게 동작하는걸까요? UTF8MB4 CHAR 경우 미리 할당된 데이터 보다 더 큰 데이터를 업데이트 하게 된다면 VARCHAR 처럼 처음 레코드가 저장되었던 공간은 delete marking후 새롭게 빈 공간에 레코드를 저장하게 되는걸까요? 예시 : CHAR(10)에 '한글'을 저장했다가, '한글 연습'을 업데이트 하는 경우 VARCHAR 처럼 동작하는지가 궁금합니다.
안녕하세요. 강의 잘 보고 있습니다.(너무 감사합니다.) 일단 char와 varchar에 대해서는 저는 이전부터 고민이 많았는데요. 이번 강의를 보면서 기존 인터넷에서 보던 자료와 상충하는 내용이 발생하여 질문을 드리고 싶습니다.(물론 '누구의 자료가 잘못됐다'라는 것이 아니라 초보자인 제 입장에서 정말 궁금해서 질문을 드린다는 말씀을 드리고 싶습니다!) 사실 내용을 여럿 찾아봤는데 결과적으로 char를 써야 할 경우 TRIM을 통해 공백을 지워야 하기 때문에 그러한 연산이 더 들어가므로 varchar를 쓰는 것이 귀찮음도 없고 좋다라는 글을 보았던 것 같습니다.(백엔드 개발자의 입장에서도 편리하다고 생각합니다.) 하지만 varchar를 쓸 경우 말씀해주신 것처럼 데이터의 길이가 기존보다 클 경우 기존 데이터를 삭제하고 새로 옮겨야 하는 비효율적인 작업이 증가할 뿐더러 데이터 페이지의 파편화가 발생할 수 있다는 생각도 정말 충분히 납득이 가는 설명이었습니다. 실제로 웬만해서는 char보다는 varchar를 쓰는 편일까요? 아니면 trim의 연산을 하는 것을 감안하고 char를 쓰는 편일까요?
안녕하세요. nextXXXX에서 언제 개설되나 궁금했었는데 이렇게 강의로 나오다니 좋네요.. BFF를 도입한 이유에 대해서 말씀 주신것 중에 궁금한게 있습니다! 트래픽 대응, 크롤링 , 시스템 점검과 같은 클라이언트 접근 제어와 관련된 정책을 한곳에서 관리 가능 및 보안성 수준 제공 가능 => Q. 나머지는 이해되는데 크롤링이 잘 이해가 안갑니다 front 모듈에서 크롤링을 시도해서 client한테 뿌려주는건가요? 사용자에게 노출되어야 하는 정보를 제한할 수도 있음 bff가 없다면 변경사항이 있을때 마다 내부적으로 사용하는 API와 public call을 위한 api 모두 변경을 해야 합니다(백엔드 api랑 프론트 모두 변경해야 한다는건가?) 그러다보면 놓치는 부분도 생김 => Q. 내부적으로 사용하는 API는 분리된 서버(컨퍼런스, analysis 등)로 이해했늗네, public call을 위한 api는 어떤걸 지칭하는 걸까요? 감사합니다.
이미지가 작게 보인다면 https://cdn.inflearn.com/public/files/posts/2722bc2b-12a3-4512-a5b7-35227283e6ec/aaaa.png 여기로 부탁드립니다! 우선 좋은 강의 배포해주셔서 정말 감사드립니다 :) 우선 설명 하기전에 왼쪽: A 트랜젝션 오른쪽: B 트랜젝션 으로 예시 하겠습니다. 순서를 말씀드리자면 A 트랜젝션 "SELECT * FROM account WHERE id=1;" 구문 실행 B 트랜젝션 "SELECT * FROM account WHERE id=1;" 구문 실행 B 트랜젝션 "UPDATE account SET balance=balance-150, version=2 WHERE id=1 AND version=1;" 업데이트 실행 A트랜젝션 "UPDATE account SET balance=balance-200, version=2 WHERE id=1 AND version=1;" 업데이트 실행 B트랜젝션 Commit 실행 A트랜젝션 Commit 실행 영상에서는 B 트랜젝션을 먼저 Update 문 실행하고 그리고 Commit 을 실행 하고나서 A 트랜젝션을 Update을 하였으니 version 정보가 불일치로 정상적으로 A 트랜젝션은 업데이트가 일어나지 않겠지만 제가 업로드한 이미지 순서대로 하게된다면 즉 A, B 트랜젝션이 동시에 Update를 실행하고 이후 동시에 A, B 트랜젝션이 동시에 Commit 을 실행하면 balance 가 0 으로 되지 않을까요? (A 트랜젝션이 맨 나중에 Commit을 했으니깐) 반대로 B 트랜젝션이 맨 마지막에 Commit을 하게 된다면 balance 값은 50으로 설정되겠지만 정상적으로 업데이트가 된다고 가정시 balance 값은 -150 이 일어나야 하는데요. 이런 케이스 때문에 optimistic Lock 보다 Pessimistic Lock 으로 해야 하지 않을까요???? 갑자기 이런 의문이 들어서 질문 드립니다.
안녕하세요. 우선 좋은 강의 감사드립니다. 1강에서 UTF8MB4 셋을 사용하면서 CHAR(10) 을 선언했을 때 기본적으로 할당되는 크기에 대해서 궁금한 부분이 있는데요. UTF8MB4 의 경우 글자당 최대 4 바이트 까지니까, CHAR(10) 이 최초에 10글자 만큼의 공간을 할당받는다고 하면 최대 40바이트가 할당되는 것이 아닌가요?? 예를 들어 '안녕' 이라는 문자열을 저장한다고 하면 안 (4바이트) 녕(4바이트) 에 문자열 길이를 저장하는 부분 까지 한다고 해도 낭비되는 공간이 있다고 생각했는데, 저장되는 기준이 궁금합니다.
안녕하세요, 특정 테이블의 데이터를 Master에서 업데이트를 하고 바로 조회를 한다면, 아직 복제되지 않은 Slave 테이블에서 데이터가 조회가 된다면, 업데이트 되지 않는 것처럼 보일 수 있을 것 같아서, 이런 경우에는 어떻게 진행이 되야하는지 궁금합니다. 바로바로 결과를 확인해야하는 경우는 Master에서만 Read되도록 설정이 가능한가요?
자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed: java.lang.IllegalArgumentException: Name for argument of type [java.lang.String] not specified, and parameter name information not available via reflection. Ensure that the compiler uses the '-parameters' flag.] with root cause 계속 위와 같은 에러가 떠서 gpt랑 구글링을 하니까 생성자 클래스에 @ConstructorProperties ({"number1", "number2"}) 어노테이션을 추가하라고 해서 추가했더니 값이 출력되는데 이 어노테이션을 작성하는게 맞나요? 또 다른 글에는 java compiler를 수정하라고 하는데 맞는지 궁금합니다 ! 저는 sts4로 진행중입니다 !
자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
안녕하세요. 다름이 아니라 제가 혼자 연습하다가 헷갈리는 점이 있어서 질문드립니다!! 일단 JSON형식의 응답을 만들기 위해서 DTO에 멤버변수에 대한 getter메서드가 있어야 한다는 것은 알고 있습니다!! 그래서 아래 코드와 같이 응답 DTO를 만들었습니다. @Getter @Setter public class WeatherInfoResponse { private String baseDate; private String baseTime; private String category; private String fcstDate; private String fcstTime; private List<WeatherAndTemp> weatherAndTempList; public WeatherInfoResponse(List<WeatherAndTemp> weatherAndTempList) { this.weatherAndTempList = weatherAndTempList; } } 그런데 문제가 저 WeatherAndTemp 객체를 담는 리스트 부분입니다. 아래가 WeatherAndTemp 클래스입니다. @Getter public class WeatherAndTemp { private String weather; private String temp; public WeatherAndTemp(String weather, String temp) { this.weather = weather; this.temp = temp; } } 제가 헷갈리는 점이 처음에 WeatherAndTemp 클래스를 getter 메서드를 생성하지 않고 만들었다가 오류가 났었습니다. 그런데 getter 메서드를 생성하니 잘됩니다. 저는 원래 응답 DTO만 Getter가 필요하다고 알고 있었는데 저런 경우는 어떤 경우인가요? 응답 DTO의 멤버변수에 사용되는 클래스도 Getter 메서드를 만들어야 하나요?
자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
spring: datasource: url: "jdbc:mysql://localhost/library" username: "root" password: "비밀번호" driver-class-name: com.mysql.cj.jdbc.Driver 위와 같이 application.yml 파일을 작성했는데, 사용자 등록을 하면 서버 내부 오류라고 뜨면서 아무것도 안되더라구요.개발자 도구로도 봤는데 뭐가 문제인지 잘 모르겠어서 구글을 찾아보다가 jpa: database: mysql hibernate.ddl-auto: update show-sql: true application.yml 파일에 추가로 이걸 입력하니까 정상적으로 작동하네요.. 혹시 이렇게 두고 실행해도 괜찮은건지 여쭤보고싶었습니다!