스프링 사용 관련 궁금한 사항이 생겨 질문드립니다 토비님 안녕하세요~ 오늘 아침에 웹프로그램 개발하다 갑자기 궁금한 사항이 생겼습니다 1. MVC 컨트롤러 를 이용 할 때 보안상 문제로 get을 사용하지 않고 post 만 작성 하는게 맞는것인지 웹프로그램을 개발 할 때 브라우저 url 에는 파라미터가 전혀 안보이는것이 보안상 최선인지 궁금합니다 토비님도, 스프링 mvc 를 이용해서 개발 하실때 모두 post 방식으로 request 를 하시는지 궁금합니다 (간혹 금융권 사이트에서는 url 부분에 파라미터가 안보였던거 같아서요.. ) 2. 네이버/카카오/유튜브 open API 등을 누가나 사용 할 수 있는데요 나쁜 사용자가 악의적인 의도를 갖고 마구 request 호출 을 할 경우 서버 트랙픽을 방어 하려고 하면 스프링의 어느 기술을 이용해서 막을 수 있을 까요? 3. 스프링 프레임웍 안에서 뷰(프론트) 부분에 JSP / 타임리프 / php / react / vue 동시에 여러가지를 함께 쓸 수가 있나요? 감사합니다. 수고하세요
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 강의 마지막에 beforeEach 메소드를 추가하여 매번 객체를 생성하게 되잖아요. 그러면 굳이 afterEach() 메소드로 매번 clear할 필요가 없다고 생각했었는데 afterEach() 메소드를 주석 처리하면 오류가 나더라고요. 제 생각엔 MemoryMemberRepository의 store 변수가 static이기 때문에 beforeEach() 메소드로 매번 객체를 새로 생성하더라도 static 변수는 새로 생기지 않고 기존의 것이 계속 공유되고 있기 때문에 afterEach()가 필요한 거 아닐까 싶은데 제가 정확히 이해한 게 맞는지, 제 생각에 오류가 있는지 궁금합니다.
DB 동시성 문제를 해결하기 위해 낙관적 잠금, 유니크 제약조건, 비관적 잠금이 있는 것으로 알고있습니다. 비관적 잠금은 성능상의 이유로 잘 사용하지 않는다고 알고있어서 낙관적 잠금 또는 유니크 제약조건으로 동시성을 해결하고 있는데, 낙관적 잠금을 사용해야 할지, 유니크 제약 조건을 사용해야 할지 의문이 들어 질문 드립니다. 감사합니다!
자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
안녕하세요 강사님 궁금한것이 있어서 질문 남깁니다 public void returnBook(String bookName) { UserLoanHistory targetHistory = this.userLoanHistories.stream () .filter(history -> history.getBookName().equals(bookName)) .findFirst() .orElseThrow(IllegalAccessError::new); //findFist()는 옵셔널로 반홚나다 targetHistory.doReturn(); } 이 로직에서 만약 한 책을 빌렸다가 반납하면 그 히스토리를 반납완료 상태로 만들어주고 끝내고 다시 그 책을 빌리려고 한다면 새로운 히스토리를 만들어서 List에 저장할텐데 그럼 다시 그책을 반납할 경우 findFirst()를 해서 그 히스토리를 찾아왔을때 이미 반납된 책을 다시 반납하는 행위가 되는것이 아닌건지 궁금해서 질문 드립니다!
<해결됨> 같은 질문 링크입니다. https://www.inflearn.com/chats/757401/x27-conditional%EA%B3%BC-condition-x27-%EA%B0%95%EC%9D%98-%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B83-0-%EC%9D%B4%EC%83%81%EC%9C%BC%EB%A1%9C-%EC%95%88%EB%90%98%EB%8A%94%EB%B6%84%EB%93%A4 https://github.com/tobyspringboot/helloboot/commit/9db7fbb4b665ad0a21e18fa580d378179b44fa92 spring boot 3에서 적용해보고 있습니다. 제목의 강의에 해당하는 커밋은 위 링크일 것 같습니다. 해당 커밋에서 checkout 한 후, dependencies { implementation('org.springframework.boot:spring-boot-starter-web') { exclude group: 'org.springframework.boot', module: 'spring-boot-starter-tomcat' } implementation 'org.springframework.boot:spring-boot-starter-jetty' testImplementation 'org.springframework.boot:spring-boot-starter-test' } 위와 같이 jetty를 사용하게 해두고 어플리케이션을 실행하면 Unable to start web server, java.lang.NoClassDefFoundError: jakarta/servlet/http/HttpSessionContext 오류는 jakarta.servlet.http 패키지의 HttpSessionContext 자바 클래스를 찾을 수 없음 이렇게 나오는 것 같습니다. 어떻게 해결할 수 있을까요..?
의존성 조언 두번째 방법에서 문제점이 UserService.login은 여전히 의존성이 감춰져있다. 위와 마찬가지로 Userservice.login을 테스트할 때 clock에 의존하고 있는지 알 수 없다. 이거였는데 세번 째 방법도 UserService를 사용하는 메서드는 login(user)만 남겨서 user가 Clock에 의존하는지 모르지 않나요? 아까 맥도날드 예제에서는 인터페이스를 사용하면 일을 시킨다고 설명하셨는데 이것도 인터페이스를 사용해서 일을 시키는거니 이렇게 구현하면 내부에서 clockHolder를 사용해도 외부에서 몰라도 되나요?
TestRestTemplate 테스트를 하려고 했으나, 해당 문제가 계속 발생하더라구요. 구글링을 해봐도 포트나 @SpringBootTest 어노테이션을 사용해서 해결해라 이런 얘기 들만 보여서 아래 결과 처럼 해결 했습니다만, 왜 영상에서 나오는 것처럼 해서 는 안되는 것인지 모르겠습니다. 1. 2. (LocalServerPort를 없애보았으나 잘됨)
안녕하세요. 앞에서 템플릿 콜백 패턴으로 트랜잭션 템플릿(스프링이 제공한 것이긴 하지만)을 구현했던 것처럼 AOP의 프록시 객체 클래스를 직접 구현할 수도 있을까요?? 구현할 수 있다면 어떤 방식으로 구현하는지, 구현이 어렵다면 어떤 부분 때문에 어려운지 궁금합니다...!
앞선 강의들에서 driverManager는 라이브러리에 등록된 DB 드라이버들을 관리하고 커넥션을 획득하는 기능을 제공한다고 배웠습니다. 하지만 여러 요청이 동시에 왔을 때 DriverManager는 커넥션이 하나 뿐이라 여러 요청을 병렬처리를 할 수 없다는 단점이 있어 커넥션 풀 이라는 개념을 도입하여 여러 요청을 풀 내의 여러개의 커넥션을 통해 병렬 처리가 가능하도록 하는 것이고, 이러한 커넥션을 획득하는 방법이 DriverManager, Hikari, DBCP2 등 여러 커넥션 획득 방법이 존재하기 때문에 이들을 추상화해둔 것이 DataSource interface이고, DataSource 구현체로 DriverManager를 통한 커넥션 획득 방법은 DriverManagerDataSource, Hikari를 통한 커넥션 획득 방법은 HikariDataSource이다. 제가 이해한 것은 이정도 인데 맞는지 모르겠습니다..
SQLExceptionTranslator translate의 파라미터가 (String task, @Nullable String sql, SQLException ex) 이런식으로 되어있던데 첫번째 task에 무엇을 넣어야하는지 궁금합니다. 맥락상 실행한 메서드명을 넣는 것 같은데 이것저것 변경해보다가 전혀 관련없는 글을 써넣어도 정상작동하던데 task에 무엇을 넣는지, 어떤 역할을 하는지 궁금합니다.
안녕하세요 토비님 제가 자주 질문 드려서 싫어 하실거 같네요.. https://www.url01.urlcom/충청도 or 제주도 or 인제군 or ...(지자체 정보 170개 ) 이런식으로 ~ Controller.java 170개의 경우를 겟매핑이나 포스트매핑(보안문제로) 해야 합니다 @GetMapping({ '/충청도', '/제주도', or '/인제군' or ......이런식으로 170 개의 지자체 }) 아래 부분을 위해서 수기 타이핑 문자열이 아닌 db에서 불러와서 배열로 넣을려고 하니 되지 않아서 제가 잘못 생각하고 있는지 여쭤봅니다 변수 = 서비스.지자체리스트; //170개 db에서 꺼내옴 @GetMapping({ value = 변수 }) ==> 이거 원래 안되는 것일 까요? 계속 스택오버플로우나 구글링 찾아봐도 제가 답을 못 찾았습니다 혹시 원래 되는 기능 이라면 , 제가 어디 문서를 찾아 봤었어야 할까요? ( 예를 들면 토비님 같은 경우 스프링 공식 문서 샘플 설명 사이트 나, 자주 방문하는 이 사이트 찾아 보면 금방 답이 나왔을 것이다 이런 부분 알려 주시면 감사합니다.. )
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] 사용자 정의함수를 db에 등록시켜놓은 다음에 jpql로 사용을 해보니 따로 방언을 등록하지 않아도 사용이 가능합니다. List<String> str = em.createQuery("select create_prefix(m.username) from Member m", String.class).getResultList(); create_prefix는 직접 등록한 함수입니다. 수업에서는 방언으로 사용자 정의 함수를 등록해야지 적용이 된다고 하는데 이 경우 왜 작동되는지 알고싶습니다.
@Autowired로 EntityManager를 주입받을때 여러 쓰레드가 동시에 접근하면 동시성 문제가 발생합니다. 하지만 @Transactional 을 추가해준다면 //1 @Repository @RequiredArgsConstructor @Transactional public class AutowiredRepository { private final EntityManager em; } //2 @Repository public class PersistenceContextRepository { @PersistenceContext private EntityManager em; } @PersistenceContext 처럼 Transaction에 의해 쓰레드간 동시성 문제를 해결해준다 고 생각하는데 맞게 생각한건지 궁금합니다. 두가지 방법 다 EntityManager를 호출 할때마다 Proxy를 통해 EntityManager를 생성하여 Thread-Safe를 보장해준다라고 볼수 있는 건가요?? 답변주시면 정말 감사하겠습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 1.위의 코드에서 txTemplate의 타입은 TransactionTemplate인데 생성자를 만들 때는 왜 PlatformTransactionManager의 타입으로 받는건가요? 2. TracsactionTemplate 타입인 txTemplate에 어떻게 PlatformTransactionManager의 타입으로도 주입해줄 수 있는건가요? tracsactionTemplate와 PlatformTransactionManager는 어떤 관계가 있는건가요? 위와 같은 설명과 연관이 있는거 같은데 잘 이해가 안됩니다 설명 부탁드립니다!
spring url 리다이렉트/포워딩 기술적 문의 드립니다 안녕하세요 김동희입니다 제가 공공기관 프로젝트에 개발자로 참여중입니다 이쪽프로젝트 환경은 jsp + 전자정부프레임웍(Spring) + html + postgre(db) 입니다 이쪽 pm 이 알아봐달라고 부탁하는 사항이 있고, 제가 생각하기에도 궁굼해서 혹시 이런부분이 될런지 문의 드립니다 메인 정부기관 홈페이지는 아래입니다 ex) https://www.url01.urlcom 각 전국 지역별(강원,인천,제주..) 지자체관 별로 별도로 지역별 블로그 형식으로 지자체관 형식을 뛰웁니다 ex) 강원특별자치도 인제군 지자체관 https://www.url01.urlcom/xxx/xxx/xxxx/xxxxx/infoMain.do?ctpv=6420000&sgg=4330000 하지만, 고객(공무원)측에서 url 하위로 깔리는 url 변수를 보여주지 말라 지자체관별로 단축 url 을 사용 할 수 있게 해달라고 합니다 as-is https://www.url01.urlcom/ xxx/xxx/xxxx/xxxxx/infoMain.do?ctpv=6420000&sgg=4330000 to-be https://www.url01.urlcom/ injegun 혹시 요청이 현재 spring(전자정부프레임웍) + jsp + tiels 환경에서 이 환경에서 고객(공무원) 들의 요청을 수렴해서 반영 할 수 있을지 모르겠습니다 AA,TA 적인 기술적인 측면에서 스프링의 config 또는 다른설정값 변경, 인터셉터변경, ~Controller~.java 변경 ~tiles.xml 변경 등을 통해서 가능 할까요? 염치 불구하고 저도 이런부분이 궁금하기도 해서 문의 드립니다 김동희 드림
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. OpenJDK 64-Bit Server VM warning: Options -Xverify:none and -noverify were deprecated in JDK 13 and will likely be removed in a future release. 이러한 오류가 뜨는데, 실행하는데는 문제가 없습니다. 이 오류를 고쳐야 할 것 같은데, 어떻게 고쳐야할까요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 커넥션 풀을 고려하여 setAutoCommit(true)로 되돌린다고 하셨는데 그 이유가 무엇인가요? 설명 부탁드립니다 !
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 강사님께서 설명하신 내용 중에 DataSourceUtils.getConnection()는 트랙잭션 동기화 매니저에서 관리하는 커넥션이 있으면 해당 커넥션을 반환한다고 말씀하셨습니다. 근데 여기서 제가 궁금한 부분은 어떤 커넥션인지 구분하는 부분이 없는데 어떻게 구별해서 커넥션을 반환하는 건가요? 예를 들어, A통장에 대한 트랙잭션을 시작한 뒤에 A통장 커넥션이 트랙잭션 동기화 매니저에 존재할 때, 동시에 B 통장도 트랙잭션을 시작하고 B 통장의 커넥션이 트랙잭션 동기화 매니저에 존재하는 상황에서 데이터 접근 로직에서 트랙잰션 매니저에 접근해서 커넥션을 가져오는 과정에서 어떻게 A 커넥션, B 커넥션을 구분해서 반환하는 건가요?? 설명 부탁드립니다.