안녕하세요. 강의를 듣던중 궁금한점이 생겨 질문 드립니다. 아래는 뷰 템플릿에 컨버터를 적용하는 강의에서 컨트롤러에서 사용되는 두개의 함수입니다. @GetMapping("/converter/edit") public String conveterForm(Model model) { IpPort ipPort = new IpPort("127.0.0.1", 8080); System.out.println(ipPort); Form form = new Form(ipPort); model.addAttribute("form", form); return "converter-form"; } @PostMapping("/converter/edit") public String conveterEdit(@ModelAttribute Form form, Model model) { IpPort ipPort = form.getIpPort(); model.addAttribute("ipPort", ipPort); return "converter-view"; } 위와 같은 코드에서 위의 GET mapping을 호출하면, 다음과 같은 창이 나오는데요, 저 때, th:value의 레퍼런스 정보는 'hello.typeconverter.type.IpPort@59cb0946' 입니다. 그런데, 동일한 mapping( http://localhost:8080/converter/edit ) 을 호출하면 매번 IpPort ipPort = new IpPort("127.0.0.1", 8080); 에 의해 새로운 IpPort 객체가 생성되어야한다고 생각했었는데, 계속 같은 'hello.typeconverter.type.IpPort@59cb0946' 레퍼런스가 나옵니다. 또, 위의 페이지에서 submit을 할 경우에, "ipPort=127.0.0.1:8080" 이라는 값이 서버로 전달되어서, 컨버터에 의해 변환되어 @ModelAttribute Form form 안의 IpPort로 바인딩이 되는 것인데, 해당 페이지에도 아래와 같이 동일한 레퍼런스가 나타납니다. GET localhost:8080/converter/edit 와 POST localhost:8080/converter/edit 는 독립적인 서로 다른 http 요청이라서 스프링 내부적으로 Form 객체 안의 IpPort객체를 바인딩하는 과정에서 새로운 IpPort 객체를 만들어서 바인딩 해줄 것이라고 생각했는데, 동일한 레퍼런스가 출력되었습니다. 이는 자바(JVM) 자체적으로 메모리를 관리하는 부분에 의한 영향인가요? 아니면 스프링 내부적으로 객체 레퍼런스를 재사용하는 매커니즘이 있는 건가요?
안녕하세요 선생님, 제가 새 프로젝트를 만들면서 이름과 위치를 정하고 다음으로 넘어갔더니 대상 프레임워크에 .NET Core 3.1 (지원하지 않음) 이라고 나옵니다. visualstudio installer에서 제가 보기에 c#에 관련된 것은 다 설치한 상태인데 더 설치해야 하는 것이 있는걸까요?
[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part1: C# 기초 프로그래밍 입문
struct 변수들을 개방을 할때 public struct Player {int hp; int attack;} struct Player{public int hp; public int attack;} 둘다 같은 의미인줄 알았는데 1번을 하면 오류가 나고 2번처럼 변수 하나하나에 퍼블릭을 넣어야하는게 묶음 전체를 개방한다도 될거같은데 왜 안되는지 이유를 여쭤봐도되나요? 1번 처럼 구조체 자체에 퍼블릭을 넣는 경우도 있나요? 혹시 객체파트로 넘어갈때 쓰이는 것일까요?
안녕하세요 개발을 진행하던 중 오류를 겪고 있어서 한가지 여쭤보려고 합니다. 제가 wsgi를 gunicorn으로 서버를 돌리려고 하는데, python manage.py runserver 명령어로 서버를 돌릴때는 에러를 겪지 않고 기능들이 정상작동 되는것을 확인 하였습니다. 하지만, gunicorn으로 서버를 돌리는 경우 'latin-1' codec can't encode characters in position 55-56: ordinal not in range(256) 해당 에러를 겪고 있습니다. (서칭해본 결과 gunicorn은 문자 인코딩을 latin-1로 설정 되어있다고 해서 환경변수를 바꿔주려고 시도를 해보았으나 실패하였습니다. gunicorn --env LANG=en_US.UTF-8 tutorial.wsgi.local:application) 현재 settings, wsgi를 분리해 놓은 상태입니다. wsgi/local.py import os import sys import importlib from django.core.wsgi import get_wsgi_application os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'tutorial.settings.local') application = get_wsgi_application() settings/local.py import os from .base import * DEBUG = True ALLOWED_HOSTS = ['*'] DEFAULT_CHARSET='utf-8' WSGI_APPLICATION = 'tutorial.wsgi.local.application' DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(BASE_DIR , 'db.sqlite3'), }, } 지금 에러를 겪는 기능은 회원가입 기능이며 serealizer.save ()에서 에러를 겪는 다고 생각도 듭니다.(전화번호 필드만 양방향 암호화를 설정하였습니다. 암호화, 복호화가능하게) 그러나 runserver후 에는 정상작동이 되기때문에 정확한 원인파악이 어렵습니다. (다른 분들 블로그를 확인하면 gunicorn을 설치하고 따로 설정한게 없이 정상작동 되는거 같습니다.) gunicorn으로 서버를 돌리는 경우 gunicorn --env LANG=en_US.UTF-8 tutorial.wsgi.local:application --bind 0:8080 gunicorn --bind 0:8080 tutorial.wsgi.local:application 2가지 명령어로도 실행 해보았으나 동일한 에러를 보여주고 있습니다. 회원가입 api로 요청시 header response allow: POST,OPTIONS connection: close content-length: 96 content-type: application/json date: Mon,27 Feb 2023 05:54:52 GMT referrer-policy: same-origin server: gunicorn vary: Accept,Cookie x-content-type-options: nosniff x-frame-options: DENY body response 'latin-1' codec can't encode characters in position 55-56: ordinal not in range(256) 도움을 주신다면 감사하겠습니다.
안녕하세요 스프링 입문 강의 수강 중 궁금한 점이 있어 질문 남깁니다. Spring Data Jpa를 적용하면서 스프링이 JpaRepository를 가진 인터페이스의 구현체를 자동으로 생성하고 빈으로 등록한다는 것으로 이해했습니다. 따라서 기존의 Repository 클래스들의 @Repository 어노테이션과 @Service 어노테이션을 삭제 후 Configuration으로 직접 빈을 등록하도록 변경하였습니다. 자동 등록되는 어노테이션을 모두 제거하였고, Config 클래스의 memberRepository 빈 등록 부분도 주석처리 해주었으나 MemberRepositoryImpl이 빈으로 등록되어 다음과 같은 에러가 발생합니다. MemberRepositoryImpl은 어디에서 빈으로 등록되는 건가요??
[질문 내용] SpringConfig클래스에 MemoryMemberRepsoitory 메소드에 retrun new JdbcMemberRepository();를 하고 dataSource 객체 생성 후 생성자까지 만들어주었습니다. 여기까지는 ()에 오류가 생기는데 여기에 dataSource를 넣어주면 전체오류가 생기여 옵션엔터를 눌러 해결하면 메소드 이름을 MemoryMemberRepository가 아닌 JdbcMemeberRepository로 바꿔라 합니다. 이를 변경하면 위에 MemberService도 바꿔야하며 전체코드에 이상이 생깁니다. package hello.hellospring; import hello.hellospring.repository.JdbcMemberRepository; import hello.hellospring.repository.MemoryMemberRepository; import hello.hellospring.service.MemberService; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import javax.sql.DataSource; @Configuration public class SpringConfig { DataSource dataSource; public SpringConfig(DataSource dataSource) { this.dataSource = dataSource; } @Bean public MemberService memberService(){ return new MemberService(memberRepository()); } @Bean public MemoryMemberRepository memberRepository(){ //return new MemoryMemberRepository(); return new JdbcMemberRepository(dataSource); //오류발생 } } java: incompatible types: hello.hellospring.repository.JdbcMemberRepository cannot be converted to hello.hellospring.repository.MemoryMemberRepository 이러한 오류내용이 뜹니다. 수업 소스코드와 동일하게 해봤는데 이럽니다!
안녕하세요 선생님. 강의를 듣던 중 스프링 통합 테스트 강의 부분에서 회원가입 부분이 오류가 납니다.. 구글 서칭 해봐도 어떻게 해야될지 잘 모르겠어서 질문 남깁니다. h2는 안끄고 작동하고 있는 상황이었으며 강의자료에 있는 코드 복붙해서 해봐도 똑같이 오류 납니다.ㅠㅠ 도움주시면 감사하겠습니다.....
안녕하세요 선생님, 강의 잘 듣고 있습니다! 제가 해당 문제를 먼저 풀고, 선생님의 모범 답안과 비교해서 다시 보고 있는데, 선생님의 답안 실행 시간의 경우 80ms인데, 제 풀이의 경우 500ms가 나와서 어떤 부분에서 이렇게 시간이 많이 걸리는지 질문 드립니다. 제가 생각했을 때, 제 풀이는 bfs를 사용했고, 선생님의 풀이는 dfs를 사용한 것이 가장 큰 차이인데, 관련해서 bfs를 이용해 문제를 푼 분의 비슷한 질문과 선생님의 답변을 읽어 봤는데, 제 코드가 특히 더 느려서 질문 드립니다. 감사합니다. http://boj.kr/64d1e109011644a499285cf8df6422a5
챌린지 02번 문제와 static 메소드 강의 질문 사항 강의 문제풀이 두번째 영상(챌린지 02번, 챌린지 03번)과 static 메소드 질문 사항 안녕하세요 강의를 듣고 있는데 내용이 헷갈려서 질문하려고 합니다. 챌린지 2번 문제를 풀 때 아래 소스코드를 보자면 private void chall02( ) { this.completeArr[1] = 1; } 프리다 문제 풀이 강의 중 두번째 강의 소스코드에 private void로 선언되어 있으므로 static method로 선언되지 않는 경우로 instance method로 선언되는 경우라서 인스턴스화된 객체를 찾기 위해서는 java.choose를 사용해야한다고 나와 있었습니다. 그런데 static 메소드 질문에 대한 답변에 강의를 들어보면 private staic, public staic으로 선언된 경우에는 java.choose를 사용하고 static 메소드가 선언되지 않는 일반적인 private, public 형태는 java.use 형식으로 사용하라고 적어 주셨는데 이게 제가 이해하는 것과 내용이 반대되게 설명하신거 같습니다. 혹시 제가 이해한 내용이 맞을까요? staic 메소드로 선언된 메소드(함수)들은 예) private staic, public staic으로 선언된 경우 인스턴스가 생성 없이 호출이 가능하기에 java.use를 사용해야하고 static 메소드가 선언되지 않는 일반적인 경우 예) private, public 형태로 선언된 경우 인스턴스가 생성 없이 호출이 불가능 하므로 java.choose를 사용하여 호출을 할 수 있으며 챌린지 03번에 대한 문제는 호출에 대한 문제가 아닌 반환 값만 변경하고 있으며 호출은 MainActivity에서 하고 있으므로 java.use를 활용하여 문제를 풀 수 있음 만약 문제 풀이와 관계없이 챌린지 03번 변수를 직접 호출하고 싶다면 static으로 선언된 메소드가 아니기 때문에 Java.choose를 사용하여 문제를 해결 가능함 이렇게 이해를 하면 되는건가요? 제가 이해한 내용이 맞다면 챌린지 2번에 대한 문제 풀이가 이해되는데 이해한 내용이 틀린다면 챌린지 2번 문제는 java.use로 풀 수 있을꺼 같은데 강의를 들으면서 혼동이 와서 다시 한번 재 질문 드립니다, 감사합니다.
안녕하세요 jpa 엔티티의 생명주기 공부를 하다 궁금한게 생겨 질문드립니다. JPA 기본편 3번 pdf 영속성관리의 10페이지 엔티티의 생명주기 그래프를 보면 removed 상태에서 flush() 를 해주면 DB에 반영되는것 같습니다. 동일 pdf의 25번 페이지에는 플러시란 영속성 컨텍스트의 변경내용을 데이터베이스에 반영하는 것 이라고 되어있는데 그렇다면 removed 상태라는 것은 객체의 인스턴스는 메모리상에서 삭제되었지만 객체가 가지고 있던 데이터는 영속성 컨텍스트에 의해 관리되고 있다고 생각해도 되나요? removed 상태가 정확히 어떤 상태인지 궁금합니다.
Auth와 Resource App 시작 시 아래 사진과 같은 에러가 발생합니다. 강의와 노션에 있는 코드를 그대로 작성했다고 생각하여 패키지 버전 문제로 추정됩니다. 현재 제가 사용중인 패키지입니다. 강의 중 사용중인 패키지 버전을 공유받고 싶습니다. 해당 오류에 대한 구글링에 실패해서 추가적으로 혹시 알고계신 레퍼런스 있으시면 알려주시면 감사드리겠습니다.