묻고 답해요
130만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 핵심 원리 - 기본편
uuid가 안찍힙니다 ㅠㅠ
안녕하세요 김영한 선생님, 스태프님들!! 너무 쉬운 이야기 일 수도 있는데.. create 이 후 uuid가 안찍혀서 메시지 남깁니다!! [아래와 같이 오류 발생] [2992c07d-caf8-4a90-bb4d-c7a16165a064] request scope bean create: hello.core.common.MyLogger@373901b7 [null][http://localhost:8080/log-demo][controller test] [null][http://localhost:8080/log-demo][service id = testID] [null] request scope bean close: hello.core.common.MyLogger@373901b7 [MyLogger] package hello.core.common; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; import java.util.UUID; @Component @Scope(value = "request") public class MyLogger { private String uuid; private String requestURL; public void setRequestURL(String requestURL) { this.requestURL = requestURL; } public void log(String message) { System.out.println("[" + uuid + "]" + "[" + requestURL + "]" + "[" + message + "]"); } @PostConstruct public void init() { String uuid = UUID.randomUUID().toString(); System.out.println("[" + uuid + "] request scope bean create: " + this); } @PreDestroy public void close() { System.out.println("[" + uuid + "] request scope bean close: " + this); } } [LogDemoController] package hello.core.web; import hello.core.common.MyLogger; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.ObjectProvider; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import javax.servlet.http.HttpServletRequest; @Controller @RequiredArgsConstructor public class LogDemoController { private final LogDemoService logDemoService; private final ObjectProvider<MyLogger> myLoggerProvider; @RequestMapping("log-demo") @ResponseBody public String logDemo(HttpServletRequest request) { String requestURL = request.getRequestURL().toString(); MyLogger myLogger = myLoggerProvider.getObject(); myLogger.setRequestURL(requestURL); myLogger.log("controller test"); logDemoService.logic("testID"); return "OK"; } } [LogDemoService] package hello.core.web; import hello.core.common.MyLogger; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.ObjectProvider; import org.springframework.stereotype.Service; @Service @RequiredArgsConstructor public class LogDemoService { private final ObjectProvider<MyLogger> myLoggerProvider; public void logic(String id) { MyLogger myLogger = myLoggerProvider.getObject(); myLogger.log("service id = " + id); } } 어떤게 문제일까요...ㅠ* 추가적으로 이런 오류도 못잡는 상황인데,, 강의 보기 보단 자바문법이 부족한 것 같아요... 파이썬 공부하고, 자바는 훌훌 넘겨보면서 봐서, 부족한데... 어떤 부분을 보면 좀 보강하고, 강의를 보는데 이해할 수 있을까요.. 바쁘실텐데 이런 오류 메시지나 남기고... 면목없습니다 달아주실 답변에 미리 감사합니다!
-
미해결스프링 핵심 원리 - 기본편
request scope bean의 생성을 지연한다는 의미가 무엇일까요?
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]안녕하세요 공부 중 궁금한 게 있어서 질문드립니다. 1. ObjectProvider.getObject()를 호출하는 시점까지 request scope bean의 생성을 지연한다고 설명해주셨는데요. provider를 사용하지 않는다면 스프링 어플리케이션을 실행하는 시점에 싱글톤 빈은 생성해서 주입이 가능하지만, request scope bean은 실제 고객 요청이 오지 않아 생성되지 않는 문제가 생기잖아요? 그런데 제가 조금 헷갈린 건 실제 고객 요청이 오기 전이라 request scope bean이 생성되지 않는데 왜 윗 문단처럼 request scope bean의 생성을 지연한다고 말씀하신걸까요?ㅠㅠ 궁금한 점은 고객이 요청하기 전에는 scope빈이 생성되지 않는데 그걸 왜 http 요청이 오기전까지 지연을 시키는 지 입니다... 감사합니다.
-
미해결스프링 핵심 원리 - 기본편
해당 proxymode 를 프로토타입쪽에 적용해보았는데 실패합니다.
안녕하세요 아래와같이 prototype bean 에대해서 proxy mode 를 적용했는데.. 테스트 결과가실패하네요. 보면 prototype 이 제대로 만들어지지 않는거같은데 ComponentScan 으로 만든게아닌 임의의 AnnotationApplicationContext 를통해서 만들어서 그런가요?? @Test void prototypeFInd() { AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(PrototypeBean.class); PrototypeBean bean = ac.getBean(PrototypeBean.class); bean.addCount(); Assertions.assertThat(bean.getCount()).isEqualTo(1); PrototypeBean bean2 = ac.getBean(PrototypeBean.class); bean2.addCount(); Assertions.assertThat(bean2.getCount()).isEqualTo(1); } @Test void singletonCLientUsePrototype() { AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(ClientBean.class, PrototypeBean.class); ClientBean clientBean1 = ac.getBean(ClientBean.class); int count1 = clientBean1.logic(); Assertions.assertThat(count1).isEqualTo(1); ClientBean clientBean2 = ac.getBean(ClientBean.class); int count2 = clientBean2.logic(); Assertions.assertThat(count2).isEqualTo(1); } @Scope("singleton") @RequiredArgsConstructor static class ClientBean { private final PrototypeBean prototypeBean; public int logic() { System.out.println("prototypeBean Add = " + prototypeBean); prototypeBean.addCount(); return prototypeBean.getCount(); } } @Scope(value = "prototype", proxyMode = ScopedProxyMode.TARGET_CLASS) static class PrototypeBean { private int count = 0; public void addCount() { count++; } public int getCount() { return count; } @PostConstruct public void init() { System.out.println("PrototypeBean.init " + this); } @PreDestroy public void destroy() { System.out.println("PrototypeBean.destroy"); } }
-
미해결스프링 핵심 원리 - 기본편
다음 강의 커리큘럼에 대해 궁금한게 있습니다
안녕하세요. [ 스프링 핵심원리 기본편 / 자바 ORM 표준 JPA 프로그래밍 기본편 / 스프링 입문 ] 이 세 강의를 들은 후 SpringBoot - JPA(Mysql ) 을 활용한 프로젝트를 진행해보고 있습니다. 그런데 [ SpringBoot - JPA(Mysql ) 의 설정 ( application.properties )] , [ 엔티티와 빈 컨테이너 구현 ] 관련해서 어려운게 있어서 추가적으로 강의를 하나 더 듣고 싶은데 1. 모든 개발자를 위한 HTTP 기본 상식 2. 실전! 스프링 부트와 활용 1 3. 실전! 스프링 부트와 활용 2 4. 실전! 스프링데이터 JPA 이 네 가지 강의 중 지금 제가 듣기 적합한게 있을까요? 물론 다 들을 거긴한대 프로젝트와 연관해서 수업을 듣고 싶어 질문남깁니다. 감사합니다.
-
미해결스프링 핵심 원리 - 기본편
자신의 클래스에서 자신을 static으로 선언하는 부분 재 질문입니다.
안녕하세요. 앞전에 질문드렸던 내용이 계속 이해되지 않아서 정리 후 재 질문 남깁니다. 먼저 제 생각은 이렇습니다. 애플리케이션이 실행되는 시점에 .java 파일은 .class파일로 바뀌어서 사용되고, static 영역에 static 변수들이 세팅됩니다. 이 두개의 경우 중 적어도 한 경우에 SingletonService 클래스의 private static final SingletonService instance = new SingletonService(); 이 코드가 실행될 수 밖에 없다고 생각합니다. 위의 그림은 해당 코드가 실행될 때를 나타내본 것입니다. 해당 그림의 인스턴스에 들어오는 값들을 보면 static 멤버변수, 메소드, 생성자 등 모든 클래스의 구성요소들이 들어오게 됩니다. 이 중 저는 static 멤버변수 부분이 의아합니다. 이에 관련되어 두가지 질문사항이 있습니다. 1. static 영역에는 50의 참조값을 가지는 instance 객체가 생성 되었습니다. 하지만 그 인스턴스 실제 값을 보면 private static final SingletonService instance = new SingletonService(); 이 코드가 들어가 있습니다. 이때 저는 `이코드가 무한 반복된다.`, 또는 `이미 instance라는 변수가 static 영역에 선언되어 있기 때문에 에러가 난다.` 두가지 중 하나의 일이 발생할 것으로 추정해 말이 안되는 코드 아닌가라는 의문이 생깁니다. 그럼에도 불구하고 잘 작동하는 것을 보니 제가 생각한 부분이 틀렸고, 모르는 부분이 존재하는 것으로 생각됩니다. 실제로 이 부분이 어떻게 동작하며 실행되는지 자세히 알고 싶습니다. 2. 두번째 질문은 private static final SingletonService instance = new SingletonService(); 이라는 줄이 실행될 때 실행 시점에 관련한 의문입니다. 이 코드가 실행될 시점은 .class 파일을 만들려고 .java 파일을 읽거나 instance 변수를 static 영역에 등록하려고 해당 코드를 실행시키거나 하는 두 시점 중 하나라고 생각이 듭니다. 두 시점 중 해당 코드가 실행되는 순간을 보면, 첫 줄에 멤버변수가 작성되어 있기 때문에 클래스의 뒷 부분인 메소드, 생성자는 아직 존재하지 않는다고 생각합니다. 그렇다면 인스턴스에 값을 채워서 참조값을 올릴때, 인스턴스에 넣을 값이 멤버변수 빼고는 존재하지 않는데 어떻게 코드가 동작하고 있는지에 관련해 의문이 남습니다. 이부분도 제가 모르는 것이 있거나 잘못 알고 있는 부분이 있는 것 같습니다. 관련된 자세한 설명과 동작방식을 알고 싶습니다. 고맙습니다.
-
미해결스프링 핵심 원리 - 기본편
안녕하세요. 아래 스윙님이 하신 질문과 동일한 질문입니다.
저도 해당 내용이 궁금해서 질문을 남기려다가 답변 내용을 보고 그렇구나 하고 넘어갔습니다. 하지만 뭔가 이상해서 질문 남깁니다. 스윙님의 질문 내용은 왜 config 클래스에 @Configuration을 붙이지 않았는데 싱글톤으로 관리가 되느냐였습니다. 그 답변은 스프링 컨테이너로 직접 등록하면 싱글톤으로 관리가 된다였구요. 그런데 다음강의의 ConfigurationSingletonTest 클래스의 configurationTest를 보고, 강의를 들으면 AppConfig에 @Configuration이 있기 때문에 싱글톤으로 관리가 되고 있다고 합니다. 또한 제거하면 유지가 되지 않는다고 하고있고요. 그 사실을 찍어서 객체 생성이 몇번 일어나는지, 객체가 동일한지로 판단하고 있습니다. 보시다시피 해당 메서드에서는 스프링 컨테이너를 통해 AppConfig를 설정 파일로 쓰고 있습니다. 그렇다면 스윙님의 질문에 대한 답변에 의하면 @Configuration이 붙던, 아니던 싱글톤이 유지되어야 하는데, 이 강의 회차의 주 내용이 @Configuration이 있기 때문에 싱글톤이 유지되고, 없다면 유지되지 않는다는 내용이라서 이부분에 대해서 재차 궁금합니다. 따라서 TestConfig에 @Configuration을 붙이지 않은 이유와 붙이지 않아도 싱글톤으로 작동한 이유가 궁금합니다. 제가 잘못 이해한 부분이 있으면 설명 부탁드리겠습니다. 감사합니다.
-
미해결스프링 핵심 원리 - 기본편
생성자를 통한 주입 테스트 질문
OrderServiceImpl orderService = new OrderServiceImpl(memberRepository, new FixDiscountPolicy()); 이렇게 써야 하는데, OrderServiceImpl orderService = new OrderServiceImpl(new MemoryMemberRepository(), new FixDiscountPolicy()); 이렇게 써도 실행이 잘 됩니다. 위에서 new MemoryMemberRepository()를 한 후, save까지 지정한 것은 맞지만, OrderServiceImpl 을 new 로 생성하면서 생성자로 new MemoryMemberRepository를 파라미터로 전달하였으니 위에서 직접 save로 생성한 객체가 아니라 새롭게 생성된 MemoryMemberRepository가 전달되는 것 아닌가요? 그러면 널포인트가 터져야할 것 같은데 왜 테스트가 성공하나요..?
-
미해결스프링 핵심 원리 - 기본편
저도 static 선언부 이해가 안가네요..
안녕하세요. 최근에 어떤분이 질문하신 내용과 답변을 봤는데도 저렇게 선언해서 사용하는 것에 대해서 이해가 안가네요.. static에 대해서는 이해가 가고, 첨부해주신 링크도 다 읽었습니다. 하지만 강의에서 SingletonService 클래스를 작성할때 private static final SingletonService instance = new SingletonService();를 선언하고 사용하는 것에 대해서 흐름이 이해가 가질 않습니다. 메모리에 static 영역에 SingletonService 클래스와 instance라는 변수가 올라가는 것인가요? 만약 올라가던, 안올라가던 상관없이 어떤 맥락으로 자신의 클래스에서 자신의 인스턴스를 만들어서 사용하는지 모르겠습니다. 보통 클래스를 생성하면 다른 곳에서 인스턴스를 생성해 사용하는 것을 많이 봤는데요.. 자신의 클래스 첫줄에 자신을 선언한다라는게 무엇을 뜻하고, 어떻게 사용되는지 어떻게 공부해볼 수 있을까요? 왜 굳이 사용할 곳에서 인스턴스를 생성하는게 아닌 저런 방법이 사용되는지도 모르겠고, 동작 방식이나 그런걸 모르겠습니다. 저게 재귀 그런건가요? 솔직히 전 질문자님도 모르는걸 정리해서 묻기 힘든 모습이셨는데, 저도 그렇네요. 이 부분에 대해 어떻게 해결할 수 있을지 도움좀 부탁드리겠습니다. 감사합니다.
-
미해결스프링 핵심 원리 - 기본편
isNotEqualTo, isNotSameAs 두개 같은건가요?
안녕하세요. 이 두개를 구글링 해보니까 실제 값이 주어진 값과 같은지 틀린지라는 말인데, 결국 같은말 아닌가요? `==` 비교도 값만 비교하는 거니까 isEqualTo의 실제 값을 비교하는거랑 같다고 생각이드네요. 근데 만약 두개가 같다면 저렇게 중복되서 존재할 이유가 없다고 생각이 들어서 질문 남기게 됐습니다. 감사합니다.
-
미해결스프링 핵심 원리 - 기본편
2:15초 쯤에 static 장점 말씀하시는데 이해가 안갑니다.
안녕하세요. static은 프로그램 실행 시 메모리에 올라와서 끝날떄까지 하나만 만들어지고, 어디서든 선언해서 쓸 수 있는 전역변수 아닌가요? 근데 왜 개발자님은 static 지정의 장점을 해당 클래스 안에서만 쓴다는 것을 표현하는 것이라고 설명해주시죠..? 이부분에 대해서 궁금합니다. 감사합니다.
-
미해결스프링 핵심 원리 - 기본편
안녕하세요. 회원 도메인이라는 단어에 대해 궁금합니다.
제가 알고있는 도메인은 ip 주소를 기억하기 어려워 기억하기 쉬운 주소를 부여한 것으로 알고있습니다. 그런데 이 맥락에서 보면 회원 도메인 설계라는 말이 무슨 말인지 이해가 가지않아서 질문남깁니다. 단순히 봤을때 어떻게 코딩할지를 다이어그램으로 그리는 작업 같은데 왜 저런 명칭이 붙는지 알 수 있을까요? 마찬가지로 vo라고 불리는 것을 도메인이라고 부르는 경우도 있던데 이 경우도 궁금합니다. 제가 궁금해서 찾아보니 http://naver.com/alkajdsf?asdlkjf 이런 url이 있을때 naver.com이 도메인이 되고, 전체적인 것은 url이 되는 것으로 알게됐습니다. 그렇다면 프로젝트를 생성 하면 앞의 naver.com이 변경되는게 아닌 / 뒤가 수정 되기 떄문에 url 쪽 용어가 더 맞는거 아닌가요? 도메인은 한프로그램에 하나가 고정되어 있는 의미 같은데요.. 어떤 점을 의아해하고 잘 모르겠는지 전달 됐을 것 같다고 생각합니다. 고생많으시고 건강 조심하세요.
-
미해결스프링 핵심 원리 - 기본편
Bean 관련 질문드립니다.
안녕하세요, Bean 관련해서 궁금한게 있습니다. 스프링컨테이너를 생성하고, 해당 컨테이너에 등록된 빈 이름들을 확인하는 테스트에서 보면 출력되는 것중 가장 첫번재는 appConfig인 것을 알 수 있습니다. AppConfig 클래스에서 어떻게 @Bean 어노테이션으로 등록하지 않은 'appConfig' 가 Bean으로 등록되는지 궁금합니다.
-
해결됨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에서 가져오는 것 같은데, 그 과정에 대해 알 수 있을까요?