안녕하세요? 강의 잘 듣고 있습니다. 서버관련해서 몇가지 헷갈리는 개념이 있어서 질문드립니다. 서버가 백엔드만 지칭하는 용어인 줄 알았는데 프론트나 DB에도 서버개념이 있다는 것이 신기했습니다. 단순히 데이터를 제공하는 입장이면 전부 서버라는 용어를 사용해도 되는 것인가요? 브라우저와 클라이언트를 같은 개념으로 생각해도 되는지요? 더 나아가 프론트까지? (저는 백엔드 개발을 공부하고 있어서 백엔드입장에서는 브라우저, 클라이언트, 프론트가 전부 같은 포지션으로 생각됩니다.) 백엔드서버가 브라우저의 접속도 기다린다고 하셨는데 백엔드서버는 프론트엔드서버하고만 통신하는 것이 아닌가요? 예를들어 브라우저(클라이언트?)에서 회원가입창을 클릭하고 프론트서버에서 화면을 보여줍니다.그리고 휴대폰인증번호를 입력한다고 하면, 프론트서버가 그 번호을 받아 백엔드서버로 넘겨줘서 백엔드에서 검증뒤 프론트로 보내주고, 프론트는 인증결과를 브라우저에 표시해줍니다. 보통 이런 경우 백엔드는 브라우저가 아니라 프론트하고 교류를 하는 것이 아닌가 생각합니다. 근본적으로 궁금한 것은 클라이언트가 브라우저에서 이런 저런 작업(클릭, 입력)을 했을 때 브라우저, 프론트, 백엔드, DB에서 서로 어떻게 통신을 하는지 내부에서 어떤 작업들이 일어나는지등의 큰 흐름을 알고 싶은데 이건 지금 질문하기보단 강의를 끝까지 들어봐야될것 같네요 ^^;;
@Module({ imports: [ TypeOrmModule.forFeature([Product, ProductTag, ProductCategory]), UserModule, ProductTagModule, ProductCategoryModule, ], providers: [ ProductResolver, ProductService, ], }) export class ProductModule {} 위와 같은 코드에서 ProductService의 실행에 필요한 ProductTagModule과 ProductCategoryModule를 다 import 해주었는데 계속 아래와 같은 의존성 오류가 나왔습니다. Nest can't resolve dependencies of the ProductService (ProductRepository, ?, UserService, ProductCategoryService). Please make sure that the argument ProductTagService at index [1] is available in the ProductModule context. Potential solutions: - Is ProductModule a valid NestJS module? - If ProductTagService is a provider, is it part of the current ProductModule? - If ProductTagService is exported from a separate @Module, is that module imported within ProductModule? @Module({ imports: [ /* the Module containing ProductTagService */ ] }) 그래서 아래와 같이 ProductTagService, ProductCategoryService를 임의로 providers에 넣어주면 또 실행이 됩니다. 해당 모듈을 이미 임포트 해주었는데 왜 서비스를 따로 또 주입해주어야 할까요? @Module({ imports: [ TypeOrmModule.forFeature([Product, ProductTag, ProductCategory]), UserModule, ProductTagModule, ProductCategoryModule, ], providers: [ ProductResolver, ProductService, ProductTagService, ProductCategoryService, ], }) export class ProductModule {} 아래는 ProductTagModule과 ProductCategoryModule 코드입니다. @Module({ imports: [TypeOrmModule.forFeature([ProductTag])], providers: [ProductTagResolver, ProductTagService], }) export class ProductTagModule {} @Module({ imports: [TypeOrmModule.forFeature([ProductCategory])], providers: [ProductsCategoriesResolver, ProductCategoryService], }) export class ProductCategoryModule {}
sqliteBrowser 사용하는 수업에서 db.sqlite3를 열려고 하니, database is locked 라는 메시지가 뜹니다. 그래서 ChatGPT나 Bard... Googling을 이용해봤지만, 저에게 해당될만한 내용이 없네요. 혹시 몰라 재부팅도 해봤습니다. 이거 DB부분만 지웠다가 다시 까는 방법이 있을까요? (makemigrations, migrate 부분)
안녕하세요 수업을 잘 따라가고 있던 중 오류가 발생하였습니다... docker을 작동 하였고 아래와 같이 나와 도커를 확인 하였습니다. gatway제외한 나머지는 작동이 되는 걸 확인 하였고 gateway만 따로 작동을 하자 아래와 같이 에러가 발생하였습니다... 버전문제 때문에 그런건가요...??
실전! 코틀린과 스프링 부트로 도서관리 애플리케이션 개발하기 (Java 프로젝트 리팩토링)
안녕하세요. 강의 들으며 재밌고 공부하고 있습니다. 감사합니다. 예외 처리를 util패지키에 모아서 처리하는 것은 이해했습니다. 약간 궁금증 생겨서 문의 남겨봅니다! BookService의 코드 일부분 입니다. 여기서 보면 UserRepository 와 BookRepository 의 findByName 에서 모두 fail()로 예외 처리를 하는데요, 이걸 그냥 리포지토리 계층의 메서드 자체에서 예외를 처리해주면 더 깔끔하지 않을까 하는 궁금증이 생겼습니다. 제가 지금까지 공부하면서는 리포지토리 계층에서 디폴트 메서드를 통해서 처리하는 코드도 봤고, 서비스 계층에서 처리하는 코드도 봐서 어떤 방식을 선호하시는지, 권장 하시는지 궁금합니다! 좋은 강의 감사합니다!
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 몰라요 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 네 [질문 내용] 여기에 질문 내용을 남겨주세요. 처음하는 초심자 입장에서 너무 어렵습니다 일단 설치부터 jdk까지는 꾸역꾸역 구글링해서 깔고했는데 인텔리제이를 설치하고 설치하는 과정에서 어떤 체크사항을 체크해야하고 어디에 저장하고 하는지 하나도 모르고 그냥 "인텔리제이 설치하시오", "자바 jdk 설치하시오" 미리 준비물로 딸랑 해놓고 지금 혼자 깔고 인텔리제이 실행해서 강사님이랑 똑같이 하려는데 처음 run하는것부터 run이 보이지도 않고 막히네요 무료강의도 아니고 돈내고 듣는데 너무 짜증나고 답답합니다 이 질문도 한참있다가 질문답변이 달릴테고... 극초심자를위한 설치부터 하나하나 같이 알려주고 하는방법좀 설명해주셨으면 좋겠습니다 시간아깝고 짜증납니다 정말
낙관 락과 비관 락을 정확히 언제 사용하는지 궁금한데요, 충돌이 잦을 때는 비관 락을 사용한다고 이해하기엔 막연한 느낌이 있어서요, 혹시 실무에서 구체적인 예시를 들어주실 수 있을까요?? 비관적 락이 구현이 훨씬 간단할 것 같은데, 실제로 실무에서 비관적 락이 아닌 낙관적 락을 직접 구현해서 사용할 일이 있는지도 궁금합니다. 충돌이 빈번하게 일어난다면 비관적 락이 더 적합할 수 있다고 하셨는데 이유가 뭔가요? 어떤 부분에서 성능상 이점이 있는지 궁금합니다. 자세하게 설명해주시면 정말 감사할 것 같습니다. 감사합니다!!
안녕하세요! 저는 프론트수업과 백엔드 수업을 듣고 하나의 웹을 혼자서 만들어보려고 하는데요. 프론트부분과 백엔드 부분 중 어느 부분을 먼저 만들어야하는지 궁금합니다. 그리고 백엔드 개발자를 준비한다면 프론트 부분의 완성도가 어느정도여야 하는지도 궁금합니다. ( 포트폴리오 제출시 어필하기 위해서 ) 질문이 많이 모호해서 답변해주시기 어려울 것 같다는 생각이 드는데요, 혼자서 포트폴리오를 위해 웹을 제작하는 경우 어느정도까지 완성해야하는지가 궁금합니다.
안녕하세요. 강의는 잘 들었습니다. 강의와 관련이 없지만 해답을 찾지 못해 이렇게 남깁니다.. 다름이 아니라 제가 jwt token을 사용하여 프로젝트를 구현을 했습니다. 제가 알고 있는 것은 jwt token을 사용하게 되면 csrf token이 필요없기 때문에 발급하면 안되는 것으로 알고 있습니다. 그래서 X-CSRFToken을 발급하지 못하게 하고 싶은데 검색해도 찾지 못했습니다. 일단 제가 해본 것으로는 settings.py -> 'django.middleware.csrf.CsrfViewMiddleware' 을 주석처리. dj-rest-auth -> REST_AUTH 설정. 이 있습니다. 토큰에 대해 잘못알고 있거나 어딜 수정하면 될지 피드백을 주시면 감사하겠습니다.
안녕하세요 재고관리시스템 강의를 복습하며 내용을 정리하는 중 의문이 생겨 질문을 드립니다. 가장 처음에 application code 레벨에서만 동시성을 해결하기 위해 syncrhonized 를 사용할 경우 해당 메서드에는 @Transactional 을 붙여서는 안된다고 설명해 주셨습니다. 실제로 이를 붙일 경우, 동시에 decrease 메서드가 호출되고 해당 로직 내부로 들어가는 것이 가능함을 확인하였습니다. 그런데 여기서 제가 의문이 들었던 것이 있습니다. @Transacitonal 을 사용할 경우 Spring AOP 에 의해 매 번 다른 proxy 인스턴스를 통해 target object 로의 호출을 하게 됩니다. proxy 객체에 대한 lock 은 서로 다른 프록시들 사이에 공유되지 않는다고 하더라도, 내부적으로 호출되는 target 객체에 대한 decrease 메서드는 결국 동일한 객체에 대한 호출을 하기 때문에, 공유되는 lock 에 대한 경쟁이 일어나는 것이 아닌가 생각이 들었습니다. 최종적으로는 target 객체에 대한 synchronized 메서드를 호출하는 것이라면, 단 하나의 스레드만 임계 영역에 들어갈 수 있어야 할 것 같은데, 그렇지 않음을 확인하였습니다. 왜 이런 일이 일어나는 것인지 이해가 잘 되지 않습니다 ㅠㅠ 이와 관련해서 어떤 키워드로 공부해보면 좋을지 추천 가능할까요..?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예 [질문 내용] 클래스 영역에서 트랜잭션을 걸어두는 것이 필수적인 내용인지 궁금합니다! 실무에서도 마찬가지로 동일하게 클래스 영역에 사용해서 적용하게 되는 것일까요? 저는 작업할 때 수정이 필요한 메서드에만 @Transactional을 선언해줬었는데 이렇게 처리했던 부분들이 잘못된 부분이었던 것인지 고민이 되어 질문드리게 되었습니다. 정리하자면 클래스단에서 무조건 '@Transactional(readOnly=true)' 를 작성해주는 것을 권장한다면 그렇게 해야하는 이유가 무엇인지 궁금하고, 무조건 걸었을 때 매번 '@Transactional(readOnly=true)' 값을 작성해줘야 하는데 매번 작성하지 않을 수 있는 방법은 없을지 궁금합니다. 감사합니다!
안녕하세요 강의 잘 들었습니다! 완강하고 나서 몇 가지 궁금증이 생겨 질문드립니다. 분산 락을 "분산" 락이라고 부르는 이유가 뭔가요? Redis가 인메모리 DB이다보니 서버마다 Redis를 가지고 있어 여러 서버에서 모두 가지고 있어 분산 락이라고 부르는 걸까요? Redis가 여러 서버에 분산되어 있다보니 서로 싱크를 맞추기가 쉽지 않을 것 같은데 이런 부분은 어떻게 해결할 수 있나요? 서로 싱크가 맞지 않는다면 synchronized 키워드의 문제점처럼 여러 프로세스에서 접근할 수 있어 정합성이 보장되지 않을 것 같아서요! Redis는 인메모리 DB라 휘발성인데 서버가 다운될 경우 복구는 어떤식으로 이뤄지는지 궁금합니다!
자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
저도 설치할 때 아래와 같은 문제가 발생 했었는데요 Error: Problem: conflicting requests - nothing provides libcrypto.so .10()(64bit) needed by mysql-community-server-8.0.11-1.el7.x86_64 - nothing provides libssl.so .10()(64bit) needed by mysql-community-server-8.0.11-1.el7.x86_64 - nothing provides libcrypto.so .10( libcrypto.so .10)(64bit) needed by mysql-community-server-8.0.11-1.el7.x86_64 ...... 아마존 리눅스 2023을 쓸 때는 el9 버전 레포지토리를 사용해주어야 한다고 합니다! [ wget dev.mysql.com/get/mysql80-commuity-release-e17-5.noarch.rpm rpm -ivh mysql-community-release-e17.5.noarch.rpm ] 이렇게 작성하던 부분을 [ sudo dnf install https://dev.mysql.com/get/mysql80-community-release-el9-1.noarch.rpm sudo dnf install mysql-community-server ] 이렇게 작성하시면 잘 설치 돼요! 출처: https://dev.classmethod.jp/articles/ec2-mysql-install-confilicting-requests-error-kr/