묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨Slack 클론 코딩[실시간 채팅 with React]
back 서버 오류
강의 수강중에 에러가 발생했는데, 이를 찾지 못하겠습니다. 회원 가입으로 axios 해서 넘어가는거는 알겠는데... 위의 캡처 긍르 보면 api.js에서 addMembers를 호출하는데 에러가 나고 있습니다. 에러는 Cannot read properties of null (reading 'addMembers')라는데 이 부분에서 에러가 왜 나는지 잘 모르겠습니다. 분명 같은 이메일로 로그인 시도시 "이미 있는 사용자입니다"하는 response를 받고 있는 상황입니다.
-
미해결쉽게 처음하는 파이썬 고급 크롤링 [Scrapy, Selenium, Headless Chrome]
[REST API] data의 교환방식 질문
- 본 강의 영상 학습 관련 문의에 대해 답변을 드립니다. (어떤 챕터 몇분 몇초를 꼭 기재부탁드립니다)- 이외의 문의등은 평생강의이므로 양해를 부탁드립니다- 현업과 병행하는 관계로 주말/휴가 제외 최대한 3일내로 답변을 드리려 노력하고 있습니다- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.<동적 웹사이트와 크롤링> - REST API 안녕하세요. 강의 잘 듣고 있습니다.REST API라고 하는 것이 데이터를 주고 받는 방법인 것은 알겠는데요. 이것이 프론트엔드와 백엔드의 데이터를 주고받는 방식이라고 이해하는게 좀 어려워서 부가설명을 부탁드립니다. 회사를 기준으로 이해하다보니 더 와닿지 않습니다. 제가 가끔씩 보는 사내의 IT개발은 JSP로된 2000줄 정도 되는 코드에 어떤 데이터가 필요하면, 데이터를 뽑는 쿼리를 데이터 베이스 담당하시는분한테 묻고 그 해당 쿼리를 집어넣고??하는 방식으로 하는 것 같은데, 제가 집에서하는 템플릿 코드 작성방식과와 다르지 않다고 이해해오고 있는데요. 규모가 큰 회사에서는 OPEN API 설명서처럼 백엔드에서DATA를 전달하는 방식을 구현해 놓는건가요? 그리고 한가지만 더 질문을 드리면, 제가 Flask 강의도 듣고 있는데요. 사실 백엔드와 프론트엔드의 차이를 잘 느끼지 못했습니다. 하나의 템플릿에 데이터를 넣어주는 역할까지를 백엔드가 하고 단지 프론트는 그 템플릿을 예쁘게 하는 역할을 하는것인가요? 만약 그렇다면 템플릿 상속도 있고, HTML CODE도 계속해서 변하는데 구분없이 혼자하는게 더 수월하겠다는 생각이 들어서요. 어떤 식으로 역할을 분배하고 일하는지 궁금합니다.정말 좋은 강의 잘듣고 있습니다. 감사합니다!
-
해결됨토비의 스프링 부트 - 이해와 원리
@MyAutoConfiguration 에서 궁금한게 있습니다.
강사님께서 JdbcTemplate 과 JdbcTransactionManager는따로 클래스를 만들고 적용하는 순서를 지정해야하는게 스프링 부트에는 있다고 하셨고정석은 각각 다른 클래스로 만들고 적용하는 순서를 지정하는게 필요하다이렇게 말씀해주셨는데 1.정석 방법을 찾아보고싶은데 어떻게 검색을 해야할까요?그리고 편의 상 하나의 구성 정보에 넣으셨는데2.하나의 구성정보하는게 더 간편한데 스프링은 정석인 방법 클래스를 나누어서 순서를 정해놓은 이유가 궁금합니다.
-
미해결Slack 클론 코딩[실시간 채팅 with React]
회원가입시 cors 오류 납니다
어느부분을 봐야할까요?
-
미해결스프링과 JPA 기반 웹 애플리케이션 개발
태그가 Account에 반영이 안됩니다.
저장시에 findById로 가져온 부분에는 잘 들어가는데 현재 Account에는 반영이 되지 않습니다. 또한 새로고침을 하면 현재 account도, db 정보에도 null 로 뜹니다. Account 엔티티에 @ManyToMany private Set<Tag> tags = new HashSet<>();했습니다...
-
해결됨풀스택 리액트 라이브코딩 - 간단한 쇼핑몰 만들기
body가 json 형태가 아닌 ReadableStream 형태로 찍힙니다.
안녕하세요. 강의 잘 듣고 있습니다. ㅎㅎ애플리케이션이 작동하는 데 있어 불편함은 없지만, 디버깅이 어려워서 질문 남깁니다.현재 Mock데이터를 받아와 콘솔에 찍어줄 때 body가 ReadableStream 형태라고 찍힙니다.body를 json 형태로 바꾸어서 보고 싶은데, handler나 browser의 setupWorker 함수에서 별도의 작업을 해 주어야 할까요??
-
해결됨Vue3 완벽 마스터: 기초부터 실전까지 - "기본편"
Non-props 속성
강의에서 root element라는 단어를 사용하시는데 제가 제대로 모르는것 같아서 질문드립니다.의미가 지칭하는 것의 태그 말하는 건가요?혹시 번거롭지만 이해를 돕기 위해 구체적인 예시를 들어줄 수 있나요?
-
미해결배달앱 클론코딩 [with React Native]
naver 지도 추가 이후 에러
네이버 맵 연동 강의 이후 npm i react-native-nmap --forcecom.fooddeliveryapp 사이에 폴더 추가com.tjdwo.fooddeliveryapppackage 이름 전부 수정 PS C:\Users\ksj\FoodDeliveryApp> npm run android> FoodDeliveryApp@0.0.1 android> react-native run-androidinfo JS server already running.info Installing the app...> Configure project :appReading env from: .env> Configure project :react-native-flipperWARNING:Software Components will not be created automatically for Maven publishing from Android Gradle Plugin 8.0. To opt-in to the future behavior, set the Gradle property android.disableAutomaticComponentCreation=true in the `gradle.properties` file or use the new publishing DSL.Deprecated Gradle features were used in this build, making it incompatible with Gradle 8.0.You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins.See https://docs.gradle.org/7.5.1/userguide/command_line_interface.html#sec:command_line_warnings5 actionable tasks: 5 up-to-datePicked up JAVA_TOOL_OPTIONS: -Djava.net.preferIPv4Stack=true FAILURE: Build failed with an exception. * What went wrong:Could not determine the dependencies of task ':app:compileDebugJavaWithJavac'.> Could not resolve all task dependencies for configuration ':app:debugCompileClasspath'. > Could not find com.naver.maps:map-sdk:3.16.2. Required by: project :app* Try:> Run with --stacktrace option to get the stack trace.> Run with --info or --debug option to get more log output.> Run with --scan to get full insights.* Get more help at https://help.gradle.orgBUILD FAILED in 10serror Failed to install the app. Make sure you have the Android development environment set up: https://reactnative.dev/docs/environment-setup.BUILD FAILED in 10s at makeError (C:\Users\ksj\FoodDeliveryApp\node_modules\@react-native-community\cli-platform-android\node_modules\execa\index.js:174:9) at C:\Users\ksj\FoodDeliveryApp\node_modules\@react-native-community\cli-platform-android\node_modules\execa\index.js:278:16 at process.processTicksAndRejections (node:internal/process/task_queues:95:5) at async runOnAllDevices (C:\Users\ksj\FoodDeliveryApp\node_modules\@react-native-community\cli-platform-android\build\commands\runAndroid\runOnAllDevices.js:82:7) at async Command.handleAction (C:\Users\ksj\FoodDeliveryApp\node_modules\@react-native-community\cli\build\index.js:108:9)info Run CLI with --verbose flag for more details.PS C:\Users\ksj\FoodDeliveryApp> 구글에 찾아보고 몇시간째 삽질 중입니다 ㅠ.ㅠ최신 naver map 에 gradle 버전이나 추가해야하는 곳이 더 있을까요?"name": "react-native", "version": "0.71.6",
-
해결됨외워서 끝내는 네트워크 핵심이론 - 기초
단편화에 관하여
선생님. 안녕하세요! 단편화 수업을 듣고 궁금점이 생겨 질문드립니다.질문1수업에서 단편화는 가급적 발생하지 않는게 좋다고 하셨습니다. 그 이유가 Packet 한 개 보낼걸 두 개로 보내면 네트워크 통신 비용이 더 나가기 때문이라고 봐도 될까요?질문2단편화를 발생시키지 않는 방법으로 처음부터 PC쪽에서 단편화를 발생시키는 Router의 MTU인 1400bytes로 보내는 방법을 말씀 해주셨습니다.예를 들어 PC쪽에서 보낼 데이터의 크기가 1500bytes이고 Router의 MTU는 1500bytes, 단편화를 발생시키는 Router의 MTU가 1400bytes라고 가정해보겠습니다. 방법1)그럼 위에서 말한 방법대로 1400bytes로 보내면 1400bytes -> 100bytes 이렇게 보내면 단편화는 일어나지 않지만 데이터를 두 번 보내야 합니다. 방법2)근데 PC에서 1500bytes로 보내면 단편화는 일어나겠지만 데이터는 한 번만 보내면 됩니다. 그럼 질문1에서 Packet을 단편화 시키는데 네트워크 비용이 증가하는게 맞다면 어떤 방법1과 방법2 중 어떤것을 선택하든 장점과 단점이 발생하는게 아닌가요?
-
미해결Jenkins를 이용한 CI/CD Pipeline 구축
Docker 이미지 다운로드가 안 돼요.... 제발 도와주세요
docker pull edowon0623/docker자체가 안 먹혀요..1개가 자꾸 Extracting이라 뜨는데 꼭 강사님 이미지를 다운 받아야 수업을 진행할 수 있는건가요 ?우분투도 설치해보고 했는데 자꾸 똑같은 부분에서 Extracting이라 뜹니다 +) 찾아보니 강사님joneconsulting/docker-files (github.com)깃에 있는 파일이랑 도커에 있는 파일이랑 같은 파일일까요 ?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-F 최솟값 질문입니다!
안녕하세요 강사님!풀이 방법 중 _num의 최댓값을 구하기 위해 ret의 최솟값을 -987654321(9자리)로 선언 했습니다.저는 만약에 string s가 1-9*9*9*9*9*9*9*9*9로 나온다면 ret의 최솟값을 선언하기 위해 저는 어림짐작으로 (1-9) 9^8 정도의 출력값이 나오겠다라 생각했고 이를 직관적으로 계산하기 위해 -8 * 9^8을 -8 * 10^8로 바꿔 셈했습니다. 그 결과 -800000000(9자리) 였고, 이보다 더 작은 수가 나올 수도 있겠다는 생각을 했었습니다. (결과적으로 -987654321보다 작은 수가 나올 수도 있겠다란 생각으로 -987654321을 최솟값으로 둬도 괜찮나?란 생각을 문제풀이 당시 했었습니다)더불어, 문제에서 정답은 2^31부터 -2^31의 미만이라는 값이 주어진다고 했고 저는 ret의 최솟값을 문제에서 설정한 범위 밖에서 설정하려고 했지만 -2^31을 보고 이 보다 작은 수를 어떻게 ret으로 선언할지에 어려움을 겪었고, -2^31이 -987654321보다 작다보니 -987654321로 최솟값을 선언하지 못하였습니다. 그래서, -987654321란 최솟값이 다른 문제에도 적용되는 통용되는 최솟값인지 그리고 저의 생각 중 어떤 곳에 오류가 있었는지 궁금하여 질문드립니다!
-
해결됨자바 코딩테스트 - it 대기업 유제
안녕하세요 선생님, 학습 순서 질문이 있습니다.
먼저, 좋은 강의 감사드립니다.선생님의 "자바(Java) 알고리즘 문제 풀이 입문" 강의를 수강 하며 실력이 많이 향상되었음을 느낍니다. 첫 번째 질문:"자바(Java) 알고리즘 문제 풀이 입문" 강의의 "DFS, BFS 활용" 섹션을 다 듣고 나서 곧바로 현재 이 강의의 DFS, BFS 부분을 들어도 괜찮은지 궁금합니다.강의 순서대로 따라가며 듣는 게 좋은지 , 굳이 순서대로 따라가며 안 들어도 되는지 궁금합니다. 두 번째 질문:물론 각 문제마다 난이도의 편차는 있겠지만, 평균적으로 현재 강좌의 DFS, BFS 부분 문제 난이도는 백준 혹은 프로그래머스로 굳이 따지자면 레벨이 어떻게 되는지 궁금합니다.감사합니다.
-
미해결나도코딩의 자바 기본편 - 풀코스 (20시간)
객체 생성부분과 new의 의미
안녕하세요 나도코딩 강사님강의를 듣다가 궁금한 부분이 있어서 질문드립니다챕터 7의 다형성파트 강의에서질문 1 : Camera camera = new Camera(); Camera factoryCam = new FactoryCam(); Camera speedCam = new SpeedCam();코드 첫번째 줄이 의미하는바가 Camera 클래스로부터 객체명이 camera인 객체를 생성한다는 것은 알겠는데등호(=) 뒤에 있는 new Camera() 이게 뭘 의미하는건지 잘 모르겠습니다코드에 (Alt + 클릭)을 하면 해당하는 코드부분으로 바로 이동하는데 Camera 클래스의Camera() 생성자로 가더라구요new Camera()가 Camera 클래스의 생성자를 의미하는건가요 ? 질문 2 :Camera factoryCam = new FactoryCam();이 코드는 Camera 클래스로부터 객체명이 factoryCam인 객체를 생성하게 되는데 자신의 클래스를 상속받는 FactoryCam 클래스의 메소드와 변수는 사용하지 못하고 Camera 클래스의 메소드만 사용할 수 있다고 하셨는데뒤에 new FactoryCam() 이 부분이 의미하는바가 무엇인가요? 질문 3 :if (camera instanceof Camera) { // camera 객체가 Camera 클래스로부터 만들어진 인스턴스이면 System.out.println("카메라입니다."); } if (factoryCam instanceof FactoryCam) { ((FactoryCam)factoryCam).detectFire();첫 번째 if 에서 camera 객체는 Camera 클래스로부터 만들어진 객체가 맞으니까"카메라입니다"를 출력하는 것은 이해되는데두번째 if 에서 factoryCam 객체는 부모클래스인 Camera 클래스로부터 생성된 객체인데왜 FactoryCam 클래스의 인스턴스인지도 이해가 안갑니다. 클래스로부터 생성된 객체를 인스턴스라고 알고 있었는데factoryCam 객체는 Camera 클래스로 부터 생성된 객체니까 Camera 클래스의 인스턴스로 이해 했는데두번째 if에서 (factoryCam instanceof FactoryCam) 이 true라고 해서 헷갈리네요 그리고 factoryCam이 FactoryCam의 객체가 맞다면 FactoryCam으로 형변환 하는 이유가 뭔가요 ?
-
해결됨독하게 되새기는 C 프로그래밍
dll의 메모리 구조는 어떻게 되나요?
안녕하세요 수업 잘 듣고 있습니다. 양질의 수업 감사합니다.수업 내용중 dll에 관해 질문이 있습니다. lib형태의 라이브러리는 실행파일에 같이 묶이기 때문에 실행파일의 메모리구조(힙,스텍,데이터등)를 참조할 것이라 생각합니다. dll의 경우 하나의 라이브러리를 여러 프로세스에서 가져와서 사용하는 형태인데 이경우 각 프로세스 마다 dll을 위한 메모리가 할당되는것인지 아니면 dll을 위한 메모리 공간이 할당되고 그것을 공유해서 사용하게 되는것인지 궁금합니다. (혹 잘못 이해하고 있으면 지도 부탁드립니다.)
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
Cannot resolve class 'org.h2.Driver'
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]persistence.xml에 그대로 복붙해서 넣었는데Cannot resolve class 'org.h2.Driver'에러가 뜨면서 아래 코드의 org.h2.Driver에 빨간줄이 뜹니다. 서칭해도 나오지 않아 여쭤봅니다.<property name="javax.persistence.jdbc.driver" value="org.h2.Driver"/>
-
해결됨PM을 위한 데이터 리터러시(프로덕트 데이터 분석)
지표 정의 문제 #2~5
2. 배달 서비스를 담당하는 PM입니다. 고객이 검색 기능에 만족했는지 확인하려면 어떤 지표를 봐야 할까요? 검색하는 흐름을 떠올리면서 그 안에 있는 이벤트를 조합해보세요.검색 기능의 목적: 내가 원하는 음식을 파는 식당에 빠르게 접근/도달목적 달성시, 고객은 식당 프로필을 클릭목적 달성 실패시, 재검색 또는 홈화면 등으로 이탈 => 지표: 식당 프로필 전환율 (검색 버튼 클릭한 유저 중 -> 즉각 식당 프로필 클릭한 유저의 비중) 3. 검색 필터 기능은 잘 사용되고 있을까요? 필터 기능의 활성화 지표를 정의하면 어떻게 할 수 있을까요? 검색 필터를 사용하는 흐름을 떠올려보면서 그 안에 있는 이벤트를 조합해보세요.필터 기능의 목적: 디테일한 조건에 맞는 식당을 빠르게 찾기 위함 목적 달성시: 필터 기능을 재사용함목적 미달성시: 필터 기능을 다시 사용하지 않음.불필요한 필터가 있지는 않은지, 어울리는 필터 방식(토글, 드롭다운)형식이 적용됐는지, 유저가 원하는 필터가 추가로 있지는 않는지 후속 확인 필요.=> 지표: 검색 기능 사용 유저중 필터 사용율 4. 배달 서비스에서 가장 중요한 지표는 무엇일까요? 왜 그 지표가 중요할까요? 그것을 어떻게 늘릴 수 있을까요?Background knowledge 서비스의 퍼널 지표중 중요 순서대로 나열하면 RARRA로, 리텐션이 가장 중요하다. 하지만 서비스 상황에 따라 더 중요한 지표가 있을 수 있으나 (예를들면 이미 리텐션은 높은 수준을 유지하고 있다면 activation, referral이 더 중요할 수 있음), 이 문제에서는 리텐션이 중요하다고 가정함 리텐션을 나타내는 지표 WAU/MAU (*active의 기준은 구매)코호트 리텐션 (weekly, monthly) Churn rate (탈퇴자+장기미이용고객(3개월+)) -> 배달앱에 경우 대체 서비스가 많아 로열티가 중요할 것 같아 로열티 지표인 DAU or WAU / MAU지표를 보는 것이 좋을 것 같다. 하지만 배달앱의 사용빈도를 고려했을 때 weekly단위로 activation된 유저수를 보는게 유용할 것으로 추측함, 즉 wau/mau가 가장 중요할 것 같음.WAU/MAU 증가 방안-> wau는 [weekly unique visitors * conversion rate]로 쪼갤 수 있다. 주간 방문자를 늘리기 위해서는 요일별 방문 습관을 만들어 주는 프로모션을 기획하는 것이 도움이 될 것, conversion rate을 늘리기 위해서는 유저의 앱내 구매경험을 개선할 필요가 있음. 5. 여러분은 이커머스 서비스에서 추천 알고리즘을 만드는 조직의 PO입니다. 추천 알고리즘은 유저의 정보와 유저로그를 토대로 구매할 것 같은 제품을 보여줍니다. 추천 알고리즘의 성능을 확인하기 위해 어떤 지표를 파악해야 할까요? 왜 해당 지표일까요?목적:추천 알고리즘의 목적은 고객이 관심 가져할 만한 제품을 추천해 Conversion rate과 ARPU를 높이는 것입니다. 우선 유저가 관심가질만한 제품과 매칭되었는지 확인하기 위해 CTR을 확인해야 합니다. 또, 매칭된 제품이 실제로 구매까지 이어지는지 (CVR), 추천을 통해 인당 구매 단가가 높아지거나 낮아지지는 않았는지(ARPU) 확인해야 합니다.
-
미해결스프링 핵심 원리 - 기본편
@Autowired 오류는 나는데 테스트 성공해서 결과값이 나왔을때 어떻게해야되나요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]@Autowired 오류는 나는데 테스트 성공해서 결과값이 나왔을때 어떻게해야되나요?질문1. 오류는 나는데 테스트 성공해서 결과값이 나왔을때 어떻게해야되나요?다른사람 문제는같은데 그냥 highlight allProblems -> none 바꾸라고 하는데 그렇게 하고싶지 않고 원인을 알아야 나중에 같은 문제 생겨도 스스로 해결 하고싶어서요 구글에 찾아봐도 해결이 안되네요 빨간줄나는 오류 원인질문 2. @Autowired(required = true)을 했을때 멤버가 스프링빈을 찾을 수없다고 나오는데@Autowired(required = false)일때도 같은 오류가 나요 의존관계주입을 잘못 된건가요?
-
미해결HTML+CSS+JS 포트폴리오 실전 퍼블리싱(시즌1)
overflow:hidden사용해야 없어지는 이유
<div class="container"> <ul class="navi"> <li><a href="#none" data-text="ABOUT">ABOUT</a></li> <li><a href="#none" data-text="INSTRUCTOR">INSTRUCTOR</a></li> <li><a href="#none" data-text="CLASS">CLASS</a></li> <li><a href="#none" data-text="LOCATION">LOCATION</a></li> </ul> </div>.navi li a{ font-size: 4em; text-decoration: none; color:#fff; position:relative; } .navi li a:before{ content : attr(data-text); position: absolute; color:yellowgreen; top:0; left:0; width:0; overflow:hidden; }위의 코드에서 왜 overflow:hidden을 주어야 비포에 width가 적용되는지 궁금합니다.overflow:hidden을 주지않고 position:absolute만 있을때 absolute는 요소를 inline block으로 바뀐다고 알고 있는데 F12개발자도구에서는 before가 inline요소라고 나오는 이유도 궁금합니다.제 독학길에 한줄기 빛이신 선생님 항상 감사합니다~!
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 프론트엔드 코스
기동시 동적으로 설정 정보를 읽어서 적용하는 방법
FE 서버 기동시(yarn start) 사전에 정의한 설정 정보를 읽어서 사용하는 방법이 있을까요?예를 들어, 아래 apollo의 uploadLink 생성 코드의 경우, 만약 graphql 서버 주소가 바뀌었다면 uri 부분을 변경해서 다시 빌드를 해야 되는데요.빌드없이 yarn start 시에 FE 서버 로컬 설정파일에서 uri를 읽어와서 적용하는 방식으로 하고 싶은데 어떤식으로 하면 좋을지요?.env 파일은 빌드 이후에 변경은 반영되지 않는것 같고.. SSR 같은 방법으로 해야 할까요? 아니면, 기동시에 accessToken 처럼 backend에 uri 정보를 조회해서 적용해야 할까요? const uploadLink = createUploadLink({ uri: "https://backendonline.codebootcamp.co.kr/graphql", headers: { Authorization: `Bearer ${accessToken}` }, credentials: "include", });
-
미해결실전! 스프링 데이터 JPA
스프링 데이터 JPA사용시 질문입니다.
[질문 내용]여기에 질문 내용을 남겨주세요.인터페이스로 repository을 만들고 JpaRepository상속할때 jpa활용1편 itemRepository처럼 save에 추가적으로 설정할때는 @Override 하고 기존 repositroy만드는거처럼 추가하면되나요?private final EntityManager em; public void save(Item item) { if (item.getId() == null) { em.persist(item); } else { em.merge(item); } }