묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨재고시스템으로 알아보는 동시성이슈 해결방법
레디스 설정이 추가적으로 필요없는건가요?
도커를 통해 레디스 설치후 라이브러리 설정 외에 별로의 URL이나 주소를 매핑하지 않았는데 어떻게 자동으로 연결되는 걸까요 ?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
spring initializr 문의드립니다
현재날짜기준,gradle-groovygradle-kotlinmaven 3개뿐입니다. 영상처럼 gradle-java 가 없어요ㅠ
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
GetMapping에서 Required request body is missing 에러
안녕하세요UI와 GetMapping API 테스트를 하는데 로컬에서 테스트 할 때는 잘 되는데API 테스트를 하면 아래와 같이 Required request body 에러가 뜹니다.Client에서 보낸 JSON데이터를 로컬에서 테스트 하면 잘 되는데 GetMapping 만 쓰는 API에서는 @RequestBody 가 안되는걸까요..? (비슷한 내용의 코드인데 GetMapping, PUTMapping, POSTMapping이 있는 API에서는 또 잘되고 있어서 이런의문점이 듭니다.)아래 코드와 에러 내용 드립니다. . 코드 (Parameter 명과 Class명 수정했습니다.)@Slf4j@RestController@RequestMapping(value = "/", method = RequestMethod.GET)public class SchoolController {@AutowiredClassService cs; @GetMapping("/School") public List<Event> School( @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @RequestBody Class class ) throws Exception { List<Class> ClassList = new ArrayList<Class>(); ClassListt = cs.selectClassBySearchCriteria(class.getId(), class.getName(), class.getCreateTime(), class.getUpdateTime());} . 에러내용 Resolved [org.springframework.http.converter.HttpMessageNotReadableException: Required request body is missing: public java.util.List<mes.sdc.mads.vo.Event> mes.sdc.mads.controller.DetectionController.anomalyEvent(mes.sdc.mads.vo.Event,org.springframework.ui.Model) throws java.lang.Exception]
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
실행이 되지 않습니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 네2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 있는데 설정해도 안됩니다,,3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 네 [질문 내용]프로젝트 생성 강의에서 압축받아온 프로젝트파일을 열었으나 실행버튼이 활성화되지 않음문제화면 -> 오른쪽 위 노란 네모박스 옆에 서버도 연결이 안되는거같습니다.. build.gradle 에서는 자바 17버전이 필요하다는거같은데, 혹시 위에있는 11버전을 전부 17버전으로 바꿔야하나요?오류 내용을 봐도 버전 문제인 것 같아서요..
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
H2 데이터베이스 설치 과정 질문입니다.
Iterm을 통해서 권한을 주는 부분h2 데이터베이스 버전은 스프링 부트 버전에 맞춘다. 권한 주기: chmod 755 h2.sh (윈도우 사용자는 x) 실행: ./h2.sh (윈도우 사용자는 h2.bat) 데이터베이스 파일 생성 방법jdbc:h2:~/test (최초 한번)~/test.mv.db 파일 생성 확인이후부터는 jdbc:h2:tcp://localhost/~/test 이렇게 접속 이 부분.. 잘 안됩니다 경로도 다르고 해서 해결이 잘 안되는데좀 도와주시면 감사하겠습니다ㅠㅠ
-
미해결자바 기초부터 마스터하기 with 은종쌤 (Do it 자바 프로그래밍 입문) - Part 1(기초편)
예제코드 다운로드 오류
실행시켜보니 이러한 문구가 나오는데 해결 방법이 있을까요...?오류: 기본 클래스 ch09.ConstantTest을(를) 로드하는 중 LinkageError가 발생했습니다.java.lang.UnsupportedClassVersionError: ch09/ConstantTest has been compiled by a more recent version of the Java Runtime (class file version 63.0), this version of the Java Runtime only recognizes class file versions up to 61.0
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
주문 Cancel 기능 질문드립니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]주문 취소하는 로직을 Post 말고 Put으로 하려고 하는데 Resolved [org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'GET' not supported] 이런 오류가 뜹니다. 제가 한건 controller에서 @postMapping -> @PutMappingcacel 함수에서 form.setAttribute("method", "put") 으로 변경 이렇게 두개로 바꿧는데 post에서는 잘 동작하는 로직이 put에서는 잘 동작하지 않아 이부분 질문드립니다!!
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
AOP가 적용되지않습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]"package hello.hellospring.aop;import org.aspectj.lang.ProceedingJoinPoint;import org.aspectj.lang.annotation.Around;import org.aspectj.lang.annotation.Aspect;import org.springframework.stereotype.Component;@Component@Aspect public class TimeTraceAop { @Around("execution(* hello.helloSpring..*(..))") public Object execute(ProceedingJoinPoint joinPoint) throws Throwable {long start = System.currentTimeMillis(); System.out.println("START : " + joinPoint.toString()); try { return joinPoint.proceed(); } finally {long finish = System.currentTimeMillis(); long timeMs = finish - start; System.out.println("END : " + joinPoint.toString()+ " " + timeMs + "ms"); }}}" TimeTraceAop 클래스를 작성한 이후에 실행을 시켜보아도 수업처럼 START END 부분이실행되지 않습니다. 단순 스프링 실행화면만 보이는데 어디가 문제일까요?
-
미해결자바 기초부터 마스터하기 with 은종쌤 (Do it 자바 프로그래밍 입문) - Part 1(기초편)
복습문제는 어디서 확인할수있을까요?
깃허브에서 찾아보았는데 안나오네요...
-
미해결실전! Querydsl
test 소스에서 @Autowired EntityManager em; 시 오류가 납니다 ㅠㅠ
java 소스에서는 EntityManager em 사용시 오류가 안나는데,test소스에서 EntityManager em @Autowired 시 빨간줄로 오류가 생깁니다 ㅠㅠ.. build.gradel, tsetd의 application.yml 같이 올립니다 무슨이유 인지 모르겠습니다 ㅜㅜ..buildscript { ext { queryDslVersion = "5.0.0" } } plugins { id 'java' id 'org.springframework.boot' version '2.7.1' id 'io.spring.dependency-management' version '1.1.0' //querydsl 추가 //id "com.ewerk.gradle.plugins.querydsl" version "1.0.10" } group = 'saft' version = '0.0.1-SNAPSHOT' java { sourceCompatibility = '17' } configurations { compileOnly { extendsFrom annotationProcessor } } repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework.boot:spring-boot-starter-validation' // NotEmpty compileOnly 'org.projectlombok:lombok' //runtimeOnly 'com.h2database:h2:1.4.199' implementation 'com.h2database:h2' //querydsl 추가 //implementation "com.querydsl:querydsl-jpa:${queryDslVersion}" //annotationProcessor "com.querydsl:querydsl-apt:${queryDslVersion}" implementation 'com.querydsl:querydsl-jpa:5.0.0' // implementation 'com.querydsl:querydsl-apt:5.0.0' // 추가 ↓ annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jpa" annotationProcessor "jakarta.annotation:jakarta.annotation-api" annotationProcessor "jakarta.persistence:jakarta.persistence-api" //파라미터 확인 라이브러리 implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.5.8' // MapStruct implementation 'org.mapstruct:mapstruct:1.4.2.Final' annotationProcessor "org.mapstruct:mapstruct-processor:1.4.2.Final" annotationProcessor( 'org.projectlombok:lombok', 'org.projectlombok:lombok-mapstruct-binding:0.1.0' ) //test추가 annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' } test { useJUnitPlatform() } /* //querydsl 추가 시작 def querydslDir = "$buildDir/generated/querydsl" querydsl { jpa = true querydslSourcesDir = querydslDir } sourceSets { main.java.srcDir querydslDir } compileQuerydsl{ options.annotationProcessorPath = configurations.querydsl } configurations { compileOnly { extendsFrom annotationProcessor } querydsl.extendsFrom compileClasspath } //querydsl 추가 끝 */ def generatedDir = "src/main/generated" clean { delete file(generatedDir) }spring: profiles: active: test datasource: url: jdbc:h2:tcp://localhost/~/saft username: sa password: driver-class-name: org.h2.Driver jpa: hibernate: ddl-auto: create properties: hibernate: # show_sql: true format_sql: true use_sql_comments: true logging.level: org.hibernate.SQL: debug # org.hibernate.type: trace
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
/order에서 submit시 /orders 페이지에서 Whitelabel page 에러가 발생합니다
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.구글 드라이브 주소 : https://drive.google.com/file/d/11uKs63KBKfCIPAPzVZNzSKVzehlHZ_nO/view?usp=drive_link강의 내용을 따라하던 중 /order 페이지를 통해 상품 주문 후 submit 버튼을 누를 시 이동하는 /orders 페이지에서 사진과 같은 Whitelabel page가 발생합니다.에러 메세지 전문은 다음과 같습니다Whitelabel Error Page This application has no explicit mapping for /error, so you are seeing this as a fallback. Sun Jul 30 16:11:18 KST 2023 There was an unexpected error (type=Internal Server Error, status=500). An error happened during template parsing (template: "class path resource [templates/order/orderList.html]") org.thymeleaf.exceptions.TemplateInputException: An error happened during template parsing (template: "class path resource [templates/order/orderList.html]") at org.thymeleaf.templateparser.markup.AbstractMarkupTemplateParser.parse(AbstractMarkupTemplateParser.java:241) at org.thymeleaf.templateparser.markup.AbstractMarkupTemplateParser.parseStandalone(AbstractMarkupTemplateParser.java:100) at org.thymeleaf.engine.TemplateManager.parseAndProcess(TemplateManager.java:666) at org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1098) at org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1072) at org.thymeleaf.spring5.view.ThymeleafView.renderFragment(ThymeleafView.java:366) at org.thymeleaf.spring5.view.ThymeleafView.render(ThymeleafView.java:190) at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1406) at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1150) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) at javax.servlet.http.HttpServlet.service(HttpServlet.java:529) at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) at javax.servlet.http.HttpServlet.service(HttpServlet.java:623) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390) at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791) at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.base/java.lang.Thread.run(Thread.java:834) Caused by: org.attoparser.ParseException: Exception evaluating SpringEL expression: "item.orderDate" (template: "order/에러 메세지를 살펴보니 html의 item.orderDate 이 부분이 문제인 것 같아서 연관된 부분을 전부 살펴봤는데도 어디서 에러가 발생하는지 찾지 못했습니다..혹시 원인을 알 수 있을까요ㅠㅠㅠ
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
Entity & 기본생성자와의 관계
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]Memeber Entity에 기본생성자가 없으면 실행 후 회원 목록 조회를 하려고 하면 에러가 발생하더라구요!! 혹시 기본생성자가 하는 Entity에 필수적으로 있어야 하는 이유가 궁금합니다.
-
미해결자바 기초부터 마스터하기 with 은종쌤 (Do it 자바 프로그래밍 입문) - Part 1(기초편)
static 메서드 main문 안에 선언 시 오류 발생 이유가 궁금합니다.
안녕하세요객체지향 핵심 섹션 5에서 6번째 강의 다형성과 다형성을 사용하는 이유를 듣는데첫 번째 실습 예제 중에 static으로 선언하는 animalMove 메서드를 main문 안에 적었더니 'void is an invalid type for the variable animalMove' 라는 오류가 발생했는데 main문 안에 선언하면 안되는 이유가 궁금합니다.
-
미해결코딩으로 학습하는 GoF의 디자인 패턴
안녕하세요, 강의 순서 질문드립니다.
안녕하세요.헤드퍼스트 디자인 패턴 책을 읽으면서 백기선님 강의를 같이 들으려고 하는데요!혹시 강의 순서대로 수강하는걸 권장하시는지 상관없는지 질문드립니다.
-
해결됨자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
변수 L에 대한 질문입니다.
변수 L이 level을 나타내는 것 같은데요.이 문제에서의 L은 level이 아닌, 인덱스로서의 의미로 작용하는 것 같습니다. level과 인덱스의 구분 개념이 헷갈리는데, 혹시 명확하게 잡아주실 수 있으실까해서 질문 남깁니다! 트리에서는 depth라는 용어를 사용하고 1부터 시작한다.그래프에서는 level이라는 용어를 사용하고 0부터 시작한다. 라고 알고 있는데, 제가 알고 있는 개념이 맞는 것인지 궁금합니다!
-
미해결실전! 코틀린과 스프링 부트로 도서관리 애플리케이션 개발하기 (Java 프로젝트 리팩토링)
안녕하세요 강사님 도메인 생성 시 주 생성자에 관한 질문드립니다.
안녕하세요 강사님~ 강의 너무 재밌게 잘 보고 있습니다.강의중에 User 리팩토링 과정에서 userLoanHistories를 주생성자에 선언하셨는데@Entity class User( @Column(nullable = false) var name: String, val age: Int?, @Id @GeneratedValue(strategy = GenerationType.IDENTITY) val id: Long? = null, ) { // 클래스 바디로 내려도 되나요? @OneToMany(mappedBy = "user", cascade = [CascadeType.ALL], orphanRemoval = true) val userLoanHistories: MutableList<UserLoanHistory> = mutableListOf() (...) }기존 자바코드에서는 이 컬랙션은 내부적으로 사용될뿐 getter로 접근하는 부분이 없기에 굳이 주생성자에 선언하는 것보다 클래스 바디로 내리는게 뭔가 더 자연스럽지 않나 하여 질문드렸습니다..!
-
미해결스프링과 JPA 기반 웹 애플리케이션 개발
안녕하세요 압축프로그렘을 다운받은후에 compile해보니 오류가 발생해서 질문드립니다
이유가 뭘까요 사진 첨부해드릴게요 이거는 다른 글을 보니 추가해주니 해결되었다던데 저는 여젼히 컴파일에서 오류가 발생하네요
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
@JoinTable 기본키, 복합키
안녕하세요 @JoinTable 사용 중 궁금증이 생겨서 질문 남깁니다.연습중에 course와 category를 다대다로 연결하기 위해 @JoinTable을 사용했습니다. 추가적인 필드가 필요없다 생각해서 우선 다대다 관계를 풀어주는 엔티티를 만들지 않고 @JoinTable을 사용했습니다. 여기서 질문 입니다. 검색을 해본 결과 @JoinTable은 들어온 fk를 복합키로 사용한다고 보았습니다. 그렇다면 제 생각에는 예를들면 @JoinTable인 course_category에 (course_id = 1 , category_id = 1)인 데이터가 존재하면 (course_id = 1 , category_id = 1)라는 데이터가 중복될 수 없다고 생각했습니다. 하지만 중복된 데이터가 저장되는 것이 가능했습니다. 이 이유가 왜인지 궁금합니다!! @ManyToMany @JoinTable(name = "COURSE_CATEGORY", joinColumns = @JoinColumn(name = "course_id"), inverseJoinColumns = @JoinColumn(name = "category_id")) private List<Category> categoryList = new ArrayList<>(); @Id 필드를 사용하기 위해 category_course 엔티티를 따로 만드는 방법으로 수정 중에 있는데 위의 질문 내용을 짚고 넘어가고 싶어서 질문 남깁니다!
-
해결됨실전! Querydsl
@Deprecated
안녕하세요 queryDsl의 기본 문법에 대해서 듣고 있는데요.현재 기준, fetchResults(), fetchCount() 가 deprecated 되었네요.(자바11, springboot 2.7 버전에 맞는 queryDsl)강의 끝부분에서 말씀하신, 복잡한 페이징 & 쿼리 부분에서는 coun와 select 쿼리가 다르니까 따로 작성해서 해야된다는 말씀 것과 연관되어서 그런 것 맞을까요? 그러면 @Deprecated 된 현재는 fetchResults(), fetchCount() 는 사용을 지양하고 별개의 쿼리로 각각의 값들을 얻어 조합해서 response 해주는 것이 맞죠?
-
해결됨실전! Querydsl
생성자
안녕하세요jpa 인강 다 듣고 querydsl 강의 듣고 있습니다. 다름이 아니라 기본생성자의 접근제한자를 PROTECTED 로 제한한 이유가 있을까요? 기본생성자 자체가 필요한 이유는 프록시 객체 생성시 필요하다고 알고 있는데요, 굳이 PROTECTED 로 설정한 이유를 알고 싶습니다. 감사합니다.