일 년 전 · 포크코딩 님의 새로운 답변
3개의 레이어(?)를 나눠 개발하는거 가능한가요?
안녕하세요 대학교에서 졸프를 하고있는데 주제는 정했고, 이제 어떻게 구현해야할지 그때그때 학습하면서 부딪혀보자 라는 마인드로 하고 있습니다. 본론으로 들어가면 3개의 레이어(?)로 나눠서 하나는 음성을 녹음하는 역할만 수행 다른하나는 음성을 그때그때 텍스트로 변환(TTS) 나머지하나는 음성에 대한 질문 처리 및 대답 반환 이런식으로 역할을 나눠서 그 일만 하게 하고 싶은데 이런식으로 구현이 가능한가요? 어렴풋이 분산시스템, 람다아키텍처 등등을 알아보다가 좀 어려운 것 같아서 해당하는 부분이 구현이 가능한지, 가능하다면 어떤 무엇을 써야할지 (Ex. AWS lambda) 같은 조언 해주실 수 있다면 대단히 감사하겠습니다.
개발자
#분산시스템
답변 1
댓글 0
조회 58
9달 전 · 이경도 님의 답변 업데이트
Jpa 커스텀 리포지토리 다중 상속 문제
커스텀 리포지토리 사용중 문제가 발생하여 질문 드립니다. @Repository public interface UserRepository extends JpaRepository<User, Long>, CustomRepository { Optional<User> findByUserId(String userId); } public interface CustomRepository { Long search(User user); } public class ACustomRepositoryImpl implements CustomRepository { @Override public Long search(User user) { return 1L; } } 이런식으로 코드를 작성하고 실행 시키면 아래와 같은 에러 메시지가 나옵니다. 그런데 ACustomRepositoryImpl 구현체 이름을 CustomRepositoryImpl 이렇게 바꾸면 정상적으로 실행됩니다. 명명규칙이 그저 개발자들 간의 약속 인줄 알았는데 규칙을 무조건 지켜야 하는 건지 궁금하여 질문 드렸습니다. Caused by: org.springframework.data.mapping.PropertyReferenceException: No property 'search' found for type 'User' at org.springframework.data.mapping.PropertyPath.<init>(PropertyPath.java:90) ~[spring-data-commons-3.2.2.jar:3.2.2] at org.springframework.data.mapping.PropertyPath.create(PropertyPath.java:443) ~[spring-data-commons-3.2.2.jar:3.2.2] at org.springframework.data.mapping.PropertyPath.create(PropertyPath.java:419) ~[spring-data-commons-3.2.2.jar:3.2.2] at org.springframework.data.mapping.PropertyPath.lambda$from$0(PropertyPath.java:372) ~[spring-data-commons-3.2.2.jar:3.2.2] at java.base/java.util.concurrent.ConcurrentMap.computeIfAbsent(ConcurrentMap.java:330) ~[na:na] at org.springframework.data.mapping.PropertyPath.from(PropertyPath.java:354) ~[spring-data-commons-3.2.2.jar:3.2.2] at org.springframework.data.mapping.PropertyPath.from(PropertyPath.java:332) ~[spring-data-commons-3.2.2.jar:3.2.2] at org.springframework.data.repository.query.parser.Part.<init>(Part.java:81) ~[spring-data-commons-3.2.2.jar:3.2.2] at org.springframework.data.repository.query.parser.PartTree$OrPart.lambda$new$0(PartTree.java:259) ~[spring-data-commons-3.2.2.jar:3.2.2] at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) ~[na:na] at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) ~[na:na] at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) ~[na:na] at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) ~[na:na] at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) ~[na:na] at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921) ~[na:na] at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) ~[na:na] at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:682) ~[na:na] at org.springframework.data.repository.query.parser.PartTree$OrPart.<init>(PartTree.java:260) ~[spring-data-commons-3.2.2.jar:3.2.2] at org.springframework.data.repository.query.parser.PartTree$Predicate.lambda$new$0(PartTree.java:389) ~[spring-data-commons-3.2.2.jar:3.2.2] at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) ~[na:na] at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) ~[na:na] at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) ~[na:na] at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) ~[na:na] at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) ~[na:na] at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921) ~[na:na] at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) ~[na:na] at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:682) ~[na:na] at org.springframework.data.repository.query.parser.PartTree$Predicate.<init>(PartTree.java:390) ~[spring-data-commons-3.2.2.jar:3.2.2] at org.springframework.data.repository.query.parser.PartTree.<init>(PartTree.java:100) ~[spring-data-commons-3.2.2.jar:3.2.2] at org.springframework.data.jpa.repository.query.PartTreeJpaQuery.<init>(PartTreeJpaQuery.java:100) ~[spring-data-jpa-3.2.2.jar:3.2.2] ... 79 common frames omitted
개발자
#spring-boot
#java
#interface
#jpa
답변 2
댓글 0
조회 176
일 년 전 · 장성호 님의 새로운 답변
JpaRepository 다중상속 오류
JpaRepository에 다중상속으로 CustomRepository를 상속하려고 합니다. 근데 자꾸 에러가 나서 질문 드립니다. @Repository public interface UserRepository extends JpaRepository<User, Long>, CustomRepository { Optional<User> findByUserId(String userId); } public interface CustomRepository { void search(); } 에러 메시지 ========================================================= Caused by: org.springframework.data.mapping.PropertyReferenceException: No property 'search' found for type 'User' at org.springframework.data.mapping.PropertyPath.<init>(PropertyPath.java:90) ~[spring-data-commons-3.2.2.jar:3.2.2] at org.springframework.data.mapping.PropertyPath.create(PropertyPath.java:443) ~[spring-data-commons-3.2.2.jar:3.2.2] at org.springframework.data.mapping.PropertyPath.create(PropertyPath.java:419) ~[spring-data-commons-3.2.2.jar:3.2.2] at org.springframework.data.mapping.PropertyPath.lambda$from$0(PropertyPath.java:372) ~[spring-data-commons-3.2.2.jar:3.2.2] at java.base/java.util.concurrent.ConcurrentMap.computeIfAbsent(ConcurrentMap.java:330) ~[na:na] at org.springframework.data.mapping.PropertyPath.from(PropertyPath.java:354) ~[spring-data-commons-3.2.2.jar:3.2.2] at org.springframework.data.mapping.PropertyPath.from(PropertyPath.java:332) ~[spring-data-commons-3.2.2.jar:3.2.2] at org.springframework.data.repository.query.parser.Part.<init>(Part.java:81) ~[spring-data-commons-3.2.2.jar:3.2.2] at org.springframework.data.repository.query.parser.PartTree$OrPart.lambda$new$0(PartTree.java:259) ~[spring-data-commons-3.2.2.jar:3.2.2] at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) ~[na:na] at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) ~[na:na] at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) ~[na:na] at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) ~[na:na] at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) ~[na:na] at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921) ~[na:na] at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) ~[na:na] at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:682) ~[na:na] at org.springframework.data.repository.query.parser.PartTree$OrPart.<init>(PartTree.java:260) ~[spring-data-commons-3.2.2.jar:3.2.2] at org.springframework.data.repository.query.parser.PartTree$Predicate.lambda$new$0(PartTree.java:389) ~[spring-data-commons-3.2.2.jar:3.2.2] at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) ~[na:na] at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) ~[na:na] at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) ~[na:na] at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) ~[na:na] at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) ~[na:na] at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921) ~[na:na] at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) ~[na:na] at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:682) ~[na:na] at org.springframework.data.repository.query.parser.PartTree$Predicate.<init>(PartTree.java:390) ~[spring-data-commons-3.2.2.jar:3.2.2] at org.springframework.data.repository.query.parser.PartTree.<init>(PartTree.java:100) ~[spring-data-commons-3.2.2.jar:3.2.2] at org.springframework.data.jpa.repository.query.PartTreeJpaQuery.<init>(PartTreeJpaQuery.java:100) ~[spring-data-jpa-3.2.2.jar:3.2.2] ... 79 common frames omitted
개발자
#spring-boot
#java
답변 1
댓글 0
조회 125
일 년 전 · 민건호 님의 댓글 업데이트
AWS Lambda가 RDS를 연결하지 못함
안녕하세요 ! 혹시 AWS Lambda와 RDS를 컴퓨팅 리소스 연결을 하고 Lambda에서 DB가 연결이 안되는 이슈를 만나보신 분이 있으실까요 ? 인바운드 규칙을 0.0.0.0/0으로 하면 람다 테스트가 잘 통과하는데 이 규칙을 지우고 람다 테스트가 제한 시간 timeout이 뜹니다 .. https://mingeonho1.tistory.com/entry/Scheduler-AWS-Lambda-%EB%B0%B0%EC%B9%98-%EC%8B%9C%EC%8A%A4%ED%85%9C-%EA%B5%AC%EC%84%B1-%EC%A4%91-%EC%9D%B4%EC%8A%88#Lambda%EA%B0%80%20DB%EB%A5%BC%20%EC%97%B0%EA%B2%B0%ED%95%98%EC%A7%80%20%EB%AA%BB%ED%95%A8-1 제가 작성한 이해를 돕기위한 블로그 글입니다 !
개발자
#aws
#lambda
#rds
답변 1
댓글 1
조회 75
일 년 전 · 김대현 님의 답변 업데이트
aws lambda와 슬랙봇 연결 오류
파이썬 코드를 이용해 aws lambda랑 슬랙봇을 연결하는 작업하고 있는데요 함수 실행에는 문제가 없는데 슬랙봇에서 명령어를 치면 이런 오류가 나옵니다 이유가 뭘까요?ㅠㅠ
개발자
#slack
#lambda
#python
답변 1
댓글 0
보충이 필요해요 3
조회 212
일 년 전 · mjm 님의 새로운 댓글
AWS 인스턴스 관련 질문 있습니다.
안녕하세요. 현재 토이 프로젝트로 아마존에서 서버를 하나 운영하고 있습니다. 일단 프로그램이 작동이 필요한 시간은 그냥 5분마다 한번씩만 작동되게 해주면 됩니다. 리눅스 서버에서 작동하기 때문에 crontab을 이용해서 5분마다 실행하게 할 수 있습니다. 하지만 이렇게 되면 서버를 사용하지 않는 시간 동안에도 과금되게 됩니다. 저는 그저 5분마다 한번만 실행하면 되거든요.. 조금 찾아보니 aws lambda 와 cloudwatch를 이용하면 특정 시간에 서버를 자동으로 껐다 켰다 할 수 있더군요. 이런 식으로 서버 자체를 껐다 켰다 하는 것이 나을까요? 아니면 그냥 서버는 계속 켜놓고 5분마다 프로그램만 실행되게 하는게 나을까요?? 서버를 5분마다 껐다 켰다하면 하루에만 288번, 한달에 8640번 입니다. 뭔가 불이익 같은 게 있을까요 조언 부탁 드립니다. 읽어주셔서 감사합니다 !
개발자
#aws-ec2
답변 1
댓글 1
조회 57
2년 전 · 이상선 님의 새로운 답변
lambda에서 DB Connection 관리는 어떻게 하고 계신가요?
현재 서비스에서 1분 주기로 도는 배치가 약 5개 정도 있고, 각각의 배치마다 약 500 ~ 8000건 정도의 데이터를 update 하고 있습니다. 사용하고 있는 DB는 AWS 의 RDS는 아니고, 온프레미스 환경의 PostgreSQL 을 사용중입니다. 문제는 커넥션이 과하게 할당되어 DB가 가끔 죽는 불상사가 일어난다는 점인데, 다른 분들은 lambda 에서 DB Connection 관리를 어떻게 하고 계신지가 궁금합니다. 현재 Connection 은 DB Connection Pool 내에서 맺어지고 있습니다. 만약 RDS 를 사용했다면 RDS Proxy 같은 서비스를 이용해서 커넥션 관리를 했을텐데, DB를 옮길 수는 없는 상황입니다. 차선책으로 생각나는 방법은 EC2 인스턴스를 띄워 람다는 해당 인스턴스에서 Connection 을 할당받아 쿼리를 수행하고, 반납하는 형태의 방법인데... 혹시 다른 좋은 방안이 있을지 궁금합니다!
개발자
#aws
#aws-lambda
#db
#connection
#rds
답변 1
댓글 0
조회 355
일 년 전 · great 님의 새로운 답변
많은 유저 수를 감당할 수 있는 소셜 서비스의 백엔드 어떻게 구성하나요?
안녕하세요. 창업 겸 작은 프로젝트를 준비하고 있는 학생입니다. 소셜 앱 쪽으로 하고 있어. 많은 트래픽과 유저를 감당할 수 있는 백엔드를 구성하고자 합니다. 혼자 개발을 하고 있어 개발 리소스가 부족하고 원래 프론트를 주로 하다보니 많이 부족합니다. 저의 목적은 다음과 같습니다. 1. 최대 50만 유저까지 (물론 50만 유저 달성은 정말 어려운 일이라고 생각합니다) 2. Auto Scaling이 되어 배포 후에 큰 신경을 안 써도 되며 3. 최대한 적은 비용을 유지하고 싶습니다. 우선 제가 뭐라도 공부해보고 질문을 드려야 할 것 같아서 나름대로 구성해봤습니다. 백엔드 언어: express 프론트 언어: RN 서비스 요약: 매일 하나의 사진을 올리고 유저끼리 투표하는 서비스 (많은 socket 알림이 오감) 서버 배포: AWS API Gateway+ AWS Elastic Beanstalk or AWS lambda DB: mongoDB atlas 이미지 저장: s3 push: FCM - 여쭤보고 싶은 사항은 다음과 같습니다. 1. 배포를 AWS lambda를 고려하고 있습니다. 서버를 서버리스로 구성하면 더 저렴할까요? 2. mongoDB atlas에서 요금을 쓰는게, aws의 DocumentDB를 사용하는 것보다 더 저렴할까요? 3. 더 비용을 낮추기 위해서는 어떤 선택을 할 수 있을까요? 제가 뭘 더 알면 좋을까요? 많이 부족하고 긴 글 읽어주셔서 감사합니다.
개발자
#express
#aws
#react-native
#mongodb
답변 4
댓글 1
추천해요 26
조회 3,329
2년 전 · 손정현 님의 답변 업데이트
aws lambda에서 nodejs promise 비동기 호출하는 방법
안녕하세요~ node.js 14를 aws lambda로 구동시켜서 작업 중에 있는데요. 배치 작업을 하나 만들었는데, 코드 중에 비동기로 다른 서비스를 호출해도 되는 요청이 있어서 await을 걸지 않았는데 로그를 보니 해당 코드가 요청하기 전에 람다가 꺼지는 것 같아서요. 혹시 이유를 아시는분 계신가요?
개발자
#aws
#lambda
#nodejs
답변 2
댓글 2
추천해요 2
조회 295