DB 동시성 문제를 해결하기 위해 낙관적 잠금, 유니크 제약조건, 비관적 잠금이 있는 것으로 알고있습니다. 비관적 잠금은 성능상의 이유로 잘 사용하지 않는다고 알고있어서 낙관적 잠금 또는 유니크 제약조건으로 동시성을 해결하고 있는데, 낙관적 잠금을 사용해야 할지, 유니크 제약 조건을 사용해야 할지 의문이 들어 질문 드립니다. 감사합니다!
<해결됨> 같은 질문 링크입니다. 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 자바 클래스를 찾을 수 없음 이렇게 나오는 것 같습니다. 어떻게 해결할 수 있을까요..?
TestRestTemplate 테스트를 하려고 했으나, 해당 문제가 계속 발생하더라구요. 구글링을 해봐도 포트나 @SpringBootTest 어노테이션을 사용해서 해결해라 이런 얘기 들만 보여서 아래 결과 처럼 해결 했습니다만, 왜 영상에서 나오는 것처럼 해서 는 안되는 것인지 모르겠습니다. 1. 2. (LocalServerPort를 없애보았으나 잘됨)
안녕하세요. 앞에서 템플릿 콜백 패턴으로 트랜잭션 템플릿(스프링이 제공한 것이긴 하지만)을 구현했던 것처럼 AOP의 프록시 객체 클래스를 직접 구현할 수도 있을까요?? 구현할 수 있다면 어떤 방식으로 구현하는지, 구현이 어렵다면 어떤 부분 때문에 어려운지 궁금합니다...!
앞선 강의들에서 driverManager는 라이브러리에 등록된 DB 드라이버들을 관리하고 커넥션을 획득하는 기능을 제공한다고 배웠습니다. 하지만 여러 요청이 동시에 왔을 때 DriverManager는 커넥션이 하나 뿐이라 여러 요청을 병렬처리를 할 수 없다는 단점이 있어 커넥션 풀 이라는 개념을 도입하여 여러 요청을 풀 내의 여러개의 커넥션을 통해 병렬 처리가 가능하도록 하는 것이고, 이러한 커넥션을 획득하는 방법이 DriverManager, Hikari, DBCP2 등 여러 커넥션 획득 방법이 존재하기 때문에 이들을 추상화해둔 것이 DataSource interface이고, DataSource 구현체로 DriverManager를 통한 커넥션 획득 방법은 DriverManagerDataSource, Hikari를 통한 커넥션 획득 방법은 HikariDataSource이다. 제가 이해한 것은 이정도 인데 맞는지 모르겠습니다..
하고 싶은 것 일부 주문이 서비스 유형: 픽업임에도 배달메뉴코드로 생성되어 이를 찾고 싶습니다. (배달메뉴와 픽업메뉴 코드는 서로 다름) 엑셀 vookup을 사용해서 상품코드를 배달 메뉴 테이블에서 검색하고, 검색되지 않으면 오주문으로 판단하는 코드를 구현했습니다. 같은 프로그램을 파이썬을 통해 구현해보고 싶은데, 다른 dataframe에 없는 값을 찾아 행을 추가하는 과정이 어려워 조언을 구하고 싶습니다. 파이썬 코드 df_pickup = 픽업 주문내역 데이터 프레임 delivery_menu_code = df_delivery_menu["상품코드"] df_misorder = pd.DataFrame() # 픽업 주문내역에서 상품코드를 꺼내 해당 상품코드가 배달 메뉴 코드에 포함되어 있는지 확인 # 만약에 코드가 없으면 해당 row를 df_misorder에 추가 for idx, row in df_pickup.iterrows(): misorder = df_delivery_menu[delivery_menu_code.str.contains(row["상품코드"], na = False)] if len(misorder) != 0: df_misorder.concat(row) else: pass # 어떻게 추가해도 계속 0개로 나와서, 도와주시면 감사드리겠습니다! len(df_misorder)
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 = 변수 }) ==> 이거 원래 안되는 것일 까요? 계속 스택오버플로우나 구글링 찾아봐도 제가 답을 못 찾았습니다 혹시 원래 되는 기능 이라면 , 제가 어디 문서를 찾아 봤었어야 할까요? ( 예를 들면 토비님 같은 경우 스프링 공식 문서 샘플 설명 사이트 나, 자주 방문하는 이 사이트 찾아 보면 금방 답이 나왔을 것이다 이런 부분 알려 주시면 감사합니다.. )
중괄호 등을 통해서 코드를 작성할 때 중괄호가 [] 이렇게 두개 자동으로 생성되는데요. 이외에도 '' 등 두개씩 자동으로 만들어줘서 코드를 작성하는데는 편리한데 'LEE' 등 코드를 쓰고 EE에서 '를 넘어 가기 위해 방향키를 눌러줘야 하는 불편함이 있습니다. 혹시 빠르게 작성하기 위해 단투키 같은게 별도로 있을지 문의드립니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 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. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 커넥션 풀을 고려하여 setAutoCommit(true)로 되돌린다고 하셨는데 그 이유가 무엇인가요? 설명 부탁드립니다 !
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 강사님께서 설명하신 내용 중에 DataSourceUtils.getConnection()는 트랙잭션 동기화 매니저에서 관리하는 커넥션이 있으면 해당 커넥션을 반환한다고 말씀하셨습니다. 근데 여기서 제가 궁금한 부분은 어떤 커넥션인지 구분하는 부분이 없는데 어떻게 구별해서 커넥션을 반환하는 건가요? 예를 들어, A통장에 대한 트랙잭션을 시작한 뒤에 A통장 커넥션이 트랙잭션 동기화 매니저에 존재할 때, 동시에 B 통장도 트랙잭션을 시작하고 B 통장의 커넥션이 트랙잭션 동기화 매니저에 존재하는 상황에서 데이터 접근 로직에서 트랙잰션 매니저에 접근해서 커넥션을 가져오는 과정에서 어떻게 A 커넥션, B 커넥션을 구분해서 반환하는 건가요?? 설명 부탁드립니다.
bean 등록 기준이 있을까요? 1안 public class ExcelExtractor { private final File file; public List<Data> excetued() { // extract logic } } 2안 @Component public class ExcelExtractor { public List<Data> excetued(File file) { // extract logic } } 1안은 스프링 빈 등록 없이 사용하는 코드입니다. 2안은 빈으로 등록하여 사용합니다. 빈으로 등록했을 때 장점은 의존성 주입을 통해서 어떤 객체를 의존하는지 한 눈에 알 수 있다고 생각합니다. 1안으로 사용하면 ExcelExtractor 객체는 서비스 클래스의 메소드 안에서 생성됩니다. 의존성이 숨겨져 있다고 생각합니다. 2안으로 사용하면 서비스 클래스 의존성에 ExcelExtractor을 추가해서 명시적으로 표시할 수 있습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] MemberRepositoryV1 에 @Repository 나 @Component를 해줘야 스프링빈에 등록이 되고 MemberServiceV1 에서 @AutoWired로 의존성주입이 가능한게 아닌가요? 헷갈려서 질문 남깁니다. 아니면 현재 실제 서버를 띄우는게 아닌 TEST 만 진행 중이라서 사용을 안하고 있는건가요?
질문은 다음과 같습니다...! ==== Spring Container 제작시, 자기자신을 Bean으로 등록하는 이유 ==== 코드를 수정했습니다. Servlet Container, DispatcherServlet을 Bean으로 등록하는 코드를 config 패키지의 클래스로 따로 빼버렸습니다. [ :이유: ComponentScan은 자기자신을 탐색범위에 넣지 않는다 ->클래스 내부의 Configuration을 찾지 못한다 -> Configuration만 외부로 빼면 자기자신을 Bean으로 등록하지 않아도 된다 ] Spring Container를 만드는 과정에 Servlet Container를 만들지 않습니다. 분리시켰습니다. (순서대로 만들어진다는 느낌을 받기위해...) 다음은 제가 작성한 main 문의 코드입니다. @ComponentScan public class DemoApplication { public static void main(String[] args) { //Spring Container 구성정보 AnnotationConfigWebApplicationContext applicationContext = new AnnotationConfigWebApplicationContext(); // Bean 등록 applicationContext.register(DemoApplication.class); //Spring Container 실행(초기화) applicationContext.refresh(); // ========================================= //Servlet Container 구성정보 ServletWebServerFactory serverFactory = applicationContext.getBean(ServletWebServerFactory.class); //servlet 만들기 DispatcherServlet dispatcherServlet = applicationContext.getBean(DispatcherServlet.class); dispatcherServlet.setApplicationContext(applicationContext); //Servlet Container 인스턴스 WebServer webServer = serverFactory.getWebServer(servletContext -> { servletContext.addServlet("dispathcerServlet", dispatcherServlet).addMapping("/*"); }); //서버 실행 webServer.start(); } } 1번의 이유로, // Bean 등록 applicationContext.register(DemoApplication.class); 이걸 주석처리했습니다. 같은 클래스내에 ApplicationContext가 있고, 생성도 완료한 시점이기 때문에, 본인이 Bean에 직접 접근해서 꺼내 써도 된다고 생각했습니다. 실제로도 직접 Bean을 꺼내서 주입시켜버립니다. ServletWebServerFactory serverFactory = applicationContext.getBean(ServletWebServerFactory.class); DispatcherServlet dispatcherServlet = applicationContext.getBean(DispatcherServlet.class); 따라서 저는, Spring Container가 아래 2줄의 코드에서 Bean을 다 생성하고 DI까지 완료한줄 알았습니다. //Spring Container 구성정보 AnnotationConfigWebApplicationContext applicationContext = new AnnotationConfigWebApplicationContext(); // Bean 등록 //applicationContext.register(DemoApplication.class); //Spring Container 실행(초기화) applicationContext.refresh(); 어차피 서블릿 환경 설정도 저 어딘가에서 ComponentScan 해서 Bean으로 등록하기 때문에 자기자신을 Bean으로 등록하는건 필요 없는줄 알았습니다. 그리고 발생한 에러 입니다. No qualifying bean of type 'org.springframework.boot.web.servlet.server.ServletWebServerFactory' available ======= 주석만 풀면 잘 돌아갑니다. 왜이럴까요...?
안녕하세요 저는 강사님 강의로 공부하고 파이썬으로 코테를 준비하고 있습니다. 저와 같은 상황에 계신분들과 공유하고 싶어 글을 올립니다. 파이썬 풀이에서 부족한 부분 알려주시면 수정하겠습니다.~ import sys sys.setrecursionlimit(10 ** 6) N, M = map(int, sys.stdin.readline().split()) MAX = 1000 + 10 graph = [[False for in range(MAX)] for in range(MAX)] visited = [False for in range(MAX)] for in range(M): x, y = map(int, sys.stdin.readline().split()) graph[x][y] = True graph[y][x] = True def dfs(idx): visited[idx] = True for j in range(1, N + 1): if not visited[j] and graph[idx][j]: dfs(j) cnt = 0 for i in range(1, N + 1): if not visited[i]: dfs(i) cnt += 1 print(cnt)