묻고 답해요
156만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨PHP 7+ 프로그래밍: 객체지향
DatabaseSessionHandler 클래스의 gc($maxlifetime) 메소드에 대해 질문드립니다.
Session을 다루다 추가로 궁금한 것이 있어 여기에 남겨봅니다. 프로젝트에서 SessionHandlerInterface 구현체로 DatabaseSessionHandler 클래스를 사용하는 모습을 볼 수 있고, 이 클래스의 public functoin gc($maxlifetime) 메소드는 만료된 세션을 제거하는 용도로 사용하는 것을 알 수 있었습니다. 시스템 안에서 자동으로 gc($maxlifetime) 메소드가 호출 될 것으로 보이는데요. 이 경우 gc($maxlifetime) 메소드가 호출 될 때 파라미터로 전달되는 $maxlifetime 값(아규먼트)의 경우 php.init에 설정된 session_maxlifetime가 대입되는 것이 맞는지 궁금합니다. (물론 php.ini 설정을 PHP 코드로 하여금 변경할 수 있겠지만요.)
-
해결됨PHP 7+ 프로그래밍: 객체지향
CentOS 7.* 서버쪽으로 배포를 해보던 중에 질문드립니다.
안녕하세요. 프로젝트 강의를 통해 만든 결과물을 실제 리눅스 서버쪽으로 배포를 해보려고 합니다. 서버환경은 아래와 같습니다. ----------------[서버 Spec]---------------- OS: CentOS 7.9 PHP: PHP 7.3 DB: MariaDB 10.4.17 Web Server: Apache 2.4 -------------------------------------------- 서버의 일반 계정을 생성 한 후 아파치 가상호스트(VirtualHost) 설정 파일을 통해 아래와 같이 설정해 보았는데, 500 ERROR 페이지로 전환되고 있어 아파치 에러 로그를 보며 해답을 찾아보아도 해결을 못하고 있습니다. 옛 레거시 PHP 같은 경우 위의 가상호스트 설정만으로도 정상적으로 홈페이지가 열렸는데요. 이 프로젝트가 잘 열리기 위한 추가 설정이 필요한지 궁금합니다.
-
미해결스프링 핵심 원리 - 기본편
오류가 안뜨는 이유
안녕하세요 영한님!! 강의 중 궁금한 사항이 있어서 질문하게 됐습니다 위 코드를 실행 했을때 영한님과 동일하게 map과 list에 값이 안들어가 있었습니다. 그런데 여기서 의문점이 생겼습니다. AnnotationConfigApplicationContext을 통해서 스프링 컨테이너에 DiscountService가 등록되고 @Autowired를 통해서 매개변수에 있는 DiscountPolicy 빈을 찾아서 의존관계를 주입 하는걸로 알고 있습니다. 그런데 AnnotationConfigApplicationContext에 AutoAppConfig를 아직 명시 안했기 때문에 @Component가 붙은 Fix,Rate가 아직 빈으로 등록이 안돼서, "현재 컨테이너에는 해당 빈이 없으니 오류 메시지를 띄워야 하는게 아닌가?" 라는 생각이 들었습니다. 위 질문에서 제가 잘못 이해한점이 있는지 만약 제가 이해한게 맞다면 왜 오류 메시지를 안띄우는건지 궁금합니다!
-
해결됨PHP 7+ 프로그래밍: 객체지향
User 클래스에 대한 질문입니다.
안녕하세요, 강의를 보며 프로젝트 예제 코드를 따라 타이핑 하면서 궁금한 것이 있어 질문드립니다. 아마 '36-메인(Index)' 강의에서 Post 클래스를 사용함에 있어 생겼었떤 궁금증과 동일할 거 같습니다. '회원가입' 처리를 위해 UserController::store 정적 메소드에서 'POST' 방식으로 넘어온 'email', 'password' 데이터를 User 객체의 프로퍼티(멤버변수)로 설정하는 코드를 볼 수 있었습니다. 하지만 실제 User 클래스에서는 가령 public $email, public $password와 같이 프로퍼티(멤버변수)가 선언되어 있지 않았는데요. 이게 어떻게 가능하게 된건지 원리가 궁금합니다. P.S 저는 Java(SpringFramework)도 함께 공부를 진행중에 있습니다.(실무에서 Java, PHP 둘 다 쓰기에...) Java에서 클래스의 성질과 비슷하다라고 생각하니 이번 강의에서 보여주셨던 코드가 동작하는게 이해가 가지 않더라구요. 미리 답변 감사드립니다.
-
해결됨PHP 7+ 프로그래밍: 객체지향
password_verify(string, hash) 함수가 매번 false가 나오는 것에 대한 해결 방법이 궁금합니다.
안녕하세요, 프로젝트 '인증' 파트에서 로그인 시 입력하게 되는 이메일과 비밀번호를 AuthController, AuthService를 통해 처리하는 것을 확인 할 수 있었습니다. 저는 현재 PHP 8.0.0 버전으로 코딩을 진행하고 있습니다. 다만, AuthService::login 로직에서 password_verify(string, hash)가 항상 false로 결과 값이 반환되는 것을 확인했습니다. 처음에는 예제 코드를 타이핑하는데 오탈자가 있었나 확인해 보았지만 그런 경우는 없었습니다. 이와 동일한 이슈에 대해 찾아보았으나 여러 개 있었고, 그 중 PHP 8 환경에서의 이슈를 다룬 블로그를 발견했습니다. (https://blog.naver.com/PostView.nhn?blogId=gwi01304&logNo=222269515571) PHP 버전 업데이트가 되면서 해당 함수의 동작 방식이 달라진 것인지 알 수 있을까요? 혹시 몰라서 저의 깃헙 레포지토리 URL을 여기에 공유해 드리겠습니다. GitHub URL: https://github.com/painkill2r/php-oop-project ============================================= 추가적으로 password_verify(string, hash) 함수의 동작 원리에 대해 궁금합니다. PHP Manual에서도 내부 동작 원리가 어떻게 되는지는 기재되어 있지 않더라구요. 첫 번째 인자로 주어진 string 값을 내부적으로 password_hash() 함로 암호화(?)하고, 이를 두 번째 인자와 비교하는게 맞을까요?
-
해결됨PHP 7+ 프로그래밍: 객체지향
AuthService::logout 메소드에서 Session 데이터를 비우는 방법에 대한 질문입니다.
안녕하세요, '로그아웃' 구현 부분에서 세션을 비우는 처리에 대해 질문드립니다. 만약, 운영중인 사이트를 이용한다고 가정했을 때 아래와 같이 대부분이 로그인 및 로그아웃 절차가 진행된다고 생각합니다. 1. 홈페이지 로그인: 세션에 유저 데이터 생성 2. 홈페이지 이용 3. 브라우저를 닫거나 로그아웃 버튼 클릭: 세션이 완전이 사라지거나, 세션은 있되 세션에서 유저 정보가 비워짐 3번 항목에서 보통 PHP에서 세션을 비울 때(삭제할 때) 아래 두 함수를 쓰는 모습을 볼 수 있었는데요. 1. session_destory() => 전체 세션을 삭제(예로 세션 저장소(파일시스템의 세션 파일 또는 DB의 세션 관리 Table의 세션 데이터)) 2. session_unset() => 세션에서 변수만 삭제(CODE E) $_SESSION = array();) 이 외 세션에서 '유저' 정보만 비우는 경우(CODE EX) $_SESSION['user'] = array();)에는 어떤 경우가 있는지 알 수 있을까요?
-
해결됨PHP 7+ 프로그래밍: 객체지향
'routes/web.php'에서 '/' URL에 대한 라우트 설정 시 처리할 Handler 선언에 대한 질문입니다.
안녕하세요. '/' URL에 대한 라우트 선언 시 궁금한 점이 있어 질문드립니다. 강의 08:45 부분에서 '/' URL을 처리할 Handler로 '\App\Controllers\IndexController::index'와 같이 선언하는 것을 볼 수 있었습니다. IndexController 클래스의 index() 메소드가 정적 메소드로 선언되어 있으므로 '::'를 사용하는 것은 이해가 되었는데요. '괄호()'를 생략했음에도 오류 없이 동작하는 이유에 대해 궁금합니다. '\App\Controllers\IndexController::index()'와 같이 설정한 경우 오히려 에러가 출력되더라구요. 위 문법과 관련한 관련 자료도 있다면 공유 부탁드립니다. 감사합니다.
-
해결됨PHP 7+ 프로그래밍: 객체지향
Session을 생성할 때 sessions 테이블 id 컬럼의 값이 어떻게 결정되는지 궁금합니다.
안녕하세요, Sessions 강의를 듣고 궁궁한 것이 생겨 질문드립니다. 강의 내용에서는 SessionHandlerInterface의 구현체 클래스를 선언하여 사용하는 것으로 보이는데요. index.php의 예제 코드 실행시 처음 생성되는 SESSION 데이터가 있으면 sessions 테이블에 세션 정보가 INSERT 되는 것으로 확인이 되었습니다. 하지만 sessions 테이블의 id 컬럼의 값이 자동으로 들어가지는 것을 확인할 수 있었는데요. 이 id은 PHPSESSID에서 가져오는 것 같은데, 그 과정에 대해 알 수 있을까요?
-
해결됨PHP 7+ 프로그래밍: 객체지향
라우팅 설정 후 페이지 접속 경로에 대한 질문입니다.
안녕하세요, 라우팅 강의를 듣고 난 후 궁금한 점이 생겨 질문드립니다. 예제 코드에서 '/', '/posts/{id}'라는 라우팅을 설정해 주셨는데요. 로컬 환경에서 학습한다는 기준으로 PHP 내장서버를 실행시켜 localhost:8000/index.php, localhost:8000/src/Database/Adaptor.php 등으로 접속했을 때에도 이에 대한 접근 불가 설정을 하지 않았으므로 접근이 허용되는 문제가 있었습니다. 이를 해결 하기 위한... 즉, 개발자가 정의한 URL 패턴 외 .php가 붙은 확장자로는 접근이 불가하게 설정할 수 있는 방법이 있을까요?
-
해결됨PHP 7+ 프로그래밍: 객체지향
Composer 설정 후 생성되는 .vendor 및 composer.json, composer.lock.json에 대한 질문입니다.
안녕하세요, Composer 강의를 학습하던 중 예제 코드들을 Git에 형상관리를 하려고 합니다. 다만, Composer 설정 후 생성되는 .vender 폴더, composer.json, composer.lock.json 파일의 경우 Git으로 형상관리를 시키는게 맞는지, 아니면 이들은 Ignore 설정을 통해 형상관리에서 제외시키는게 맞는지 궁금합니다.
-
미해결스프링 핵심 원리 - 기본편
request scope 빈 생성
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예[질문 내용]여기에 질문 내용을 남겨주세요. 항상 좋은 강의 감사합니다. 강의를 한번 보고 복습하던 도중 request scope 빈의 생성 시점이 헷갈려서 질문남깁니다. reqeust scope의 경우 http 요청이 들어오고 나갈때까지 유지되는 빈이라서 당연히 예제에서 http 요청이 들어오는 시점에 생성이 된다고 생각했습니다. 그리고 ObjectProvider의 getObject() 메서드 를 이용하면 request scope이 생성시점을 지연한다고 확인했는데 정확히는 http 요청시 생성된 빈을 DL 함으로 스프링 컨테이너에게 request scope 빈을 요청하는 시기를 지연한다고 생각하면 되는건가요? 앞서 배웠던 prototype의 경우는 클라이언트가 요청하면 생성되는거라 getObject() 시점에 생성되는거구요.
-
해결됨객체 지향 프로그래밍 입문
기능 분리 기준에 대한 질문이 있습니다.
계산 분리 및 연동 분리에서 보면 분리 단위를 별도 객체를 통해 분리를 예시로 들어주시고 있으십니다.별도 객체로 분리하는 게 1장에서 배운 측면에서 유리하겠지만 어떠한 특정한 경우에는 별도 객체가 아닌 별도 메서드로 분리하는 게 유리하지 않을까란 생각이 듭니다.문제는 그게 어떠한 특정한 경우인지 모르겠습니다. 강사님께서는 무조건적으로 분리 시 객체 단위로 분리하시나요 아니면 특정한 경우에 대해서는 메서드를 통해 분리를 하시는 지 궁금합니다.감사합니다.이상입니다.
-
미해결백엔드 프레임워크 만들기 (개정판)
인텔리제이 컴파일 에러
C:\public\code5\inflearn08\src_biz\com\biz\board\Board_test.java:3:17 java: package org.junit does not exist C:\public\code5\inflearn08\src_biz\com\biz\board\Board_test.java:17:6 java: cannot find symbol symbol: class Test location: class com.biz.board.Board_test 어떻게 해야되는 건가요?
-
해결됨스프링 핵심 원리 - 기본편
request 스코프 빈의 HTTP request 구분 질문
안녕하세요. 매번 좋은 강의 잘 듣고 있습니다. request 스코프의 "요청" 구분에 관한 질문이 있어 글 남깁니다. 1. HTTP request 요청이 다른지는 어떻게 판단하나요? 2. 같은 클라이언트가 같은 endpoint(URI)의 요청을 두 번 하였을 경우에도 각각 다른 요청으로 처리되나요?
-
해결됨스프링 핵심 원리 - 기본편
프로토타입 빈에 대한 질문
안녕하세요. 프로토타입 스코프 강의를 듣던 중 궁금점이 생겨 질문 드립니다. 1. 프로토타입 빈의 필요성에 대한 질문 프로토타입 빈은 스프링 컨테이너에서 요청 시마다 새롭게 생성되어 반환된다고 하였습니다. 그렇다면 굳이 스프링 컨테이너에서 관리할 필요가 있나요? 순수 자바코드로도 충분히 가능한 것 아닐까요? 2. 프로토타입 빈의 "관리"에 대한 질문 스프링 컨테이너에서 빈을 생성, 의존관계 주입만 처리하고 이후 관리하지 않는다고 하였는데, 여기서 말하는 '관리'에 해당하는 내용은 어떤 것들이 있는지(정확히는 빈 종료 외에도 다른 항목이 있는지) 궁금합니다. 또한 스프링 컨테이너가 종료될 때 싱글톤타입 빈과는 달리, 프로토타입 빈은 종료되지 않는 건가요?
-
해결됨스프링 핵심 원리 - 기본편
할인 정책을 동시에 적용하고 싶은 경우 AppConfig 설정 방법
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용] 안녕하세요 객체지향 개발에 관심이 생겨 공부중인 개발자 입니다. 좋은 강의 잘 듣고 있습니다. 한번에 하나의 할인 정책을 적용하는 경우는 AppConfig에서 지정을 해주면 되는데 만약 동시에 두 개 이상의 할인 정책을 적용하는 경우 어떤 방법으로 구현하면 좋을지 궁금해서 질문드립니다. 1. 현재 적용하고 있는 할인 정책이 하나인 경우 아래와 같이 AppConfig에서 제어흐름을 담당하면서 어떤 할인 정책을 적용할지 결정을 한다는 점은 이해했습니다. public DiscountPolicy discountPolicy() { // return new FixDiscountPolicy(); return new RateDiscountPolicy(); } 2. 할인 정책을 모두(정액, 정률) 사용하고 싶은 경우 예를 들어 할인 정책을 적용할 수 있는 쿠폰이 정액, 정률 두 개가 동시에 존재한다고 했을 때 클라이언트의 변경 없이(OCP) 할인정책을 적용하고 싶다면 AppConfig 에서 `discountPolicy()` 메소드를 호출할 때 정률 할인 쿠폰인 경우 `new RateDiscountPolicy()`를 리턴해야하고 정액 할인 쿠폰인 경우 `new FixDiscountPolicy()`를 리턴해줘야 합니다. 2-1. AppConfig 를 인터페이스로 변경하고 구현체를 별도로 생성 public class FixDiscountAppConfig implements AppConfig { … } public class RateDiscountAppConfig implements AppConfig { … } // OrderApp AppConfig appConfig; if (“정률할인 쿠폰”) { appConfig = new RateDiscountAppConfig(); } else If (“정액할인 쿠폰”) { appConfig = new FixDiscountAppConfig(); } AppConfig appConfig = new AppConfig(); MemberService memberService = appConfig.memberService(); OrderService orderService = appConfig.orderService(); 2.2 AppConfig 내 discountPolicy 메소드 호출 시 파라미터를 넘겨 구분 public DiscountPolicy discountPolicy(String 할인정책) { if (“정액”.equals(할인정책)) { return new FixDiscountPolicy(); } else { return new RateDiscountPolicy(); } } 한번에 하나의 정책을 적용하는 것보단 동시에 여러 정책을 적용하는 경우가 더 많을 것 같다고 생각이 들었습니다. 이 경우에는 어떤 방식으로 구현하는게 좋은 객체 지향원칙을 지키며 구현하는 것일지 조언을 구하고자 합니다.
-
미해결스프링 핵심 원리 - 기본편
IntelliJ 자동완성 관련
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 네2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 네3. 질문 잘하기 메뉴얼을 읽어보셨나요? 네[질문 내용]스프링으로 전환하기 4:05 구간을 보시면 applicationContext.getBean(~)에 Bean 이름을 입력하십니다. 신기하게도 텍스트일 뿐인데 IntelliJ가 추정해서 Bean 이름을 제안해주네요. 제 IntelliJ는 자동완성이 안되는데 따로 설정법이 있나요? 구글링을 해봐도 해당 내용을 찾기 어렵군요. IntelliJ IDEA 최신 버전을 사용 중입니다.
-
미해결스프링 핵심 원리 - 기본편
@Qualifer 적용과 Annotation 상속, 생존주기에 관한 질문
안녕하세요!! 다른 분 질문의 답변을 보고 헷갈려서 질문드립니다. https://www.inflearn.com/questions/275260 위 질문의 답변에서 @Qualifier 만 사용해도 된다는 답변을 보고 그대로 실행해봤지만 여전히 컴포넌트스캔 과정에서 NoUnique ~ 예외가 나는것을 확인했습니다. 그래서 실험해본 결과 아래와 같이 @Retention 을 지정해야 컴포넌트 스캔에 성공하는 것을 확인했습니다. 조금 알아보니까 @Retention 을 지정하지 않을경우 생존주기가 CLASS로 설정된다는 것을 알았습니다. 그래서 @Retention 을 RUNTIME으로 지정해주지 않으면 컴포넌트 스캔은 런타임에 일어나기 때문에 @MainDiscountPolicy 어노테이션이 런타임에는 이미 누락되어 @Qualifier("mainDiscountPolicy") 에 도달 하지 못하는게 아닐까 하는 생각하게 되었습니다.(@Qualifier 에 Retention이RUNTIME으로 지정 되어있어도 애초에 도달하지 못함) 이 같은 제 생각에 틀린 부분이 있는지, 아니면 혹시 질문에 대한 답변을 잘못 이해한 것인지 궁금하여 질문드립니다!!
-
미해결스프링 핵심 원리 - 기본편
스프링 컨테이너?
스프링 컨테이너가 이전시간에 설명해 주신 DI컨테이너랑 같은 용어인가요? 즉 IoC 컨테이너 = DI 컨테이너 = 스프링 컨테이너 인가요?
-
미해결스프링 핵심 원리 - 기본편
로드맵에 관련해서 질문드립니다
강의를 수강하다가 시험이랑 겹쳐 내용을 많이 까먹은 것 같아서 처음부터 다시 보려고 합니다! 스프링 입문 - 코드로 배우는 스프링 부트 > 웹 MVC, DB 접근 기술 > 스프링 핵심 원리 - 기본편 > 모든 개발자를 위한 HTTP 웹 기본 지식 > 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 > 스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 > 스프링 핵심 원리 - 고급편 순서로 수강한 후 김영한의 스프링 부트와 JPA 실무 완전 정복 로드맵의 야생편을 따라가면 될까요?